re PR c++/10405 (Segfault in setup_class_bindings)
cp: PR c++/10405 * search.c (lookup_field_1): Final scan goes backwards for types, forwards for non-types. testsuite: PR c++/10405 * g++.dg/lookup/struct-hack1.C: New test. From-SVN: r65846
This commit is contained in:
parent
1613e52bdd
commit
de0c0e694f
@ -1,3 +1,9 @@
|
||||
2003-04-19 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/10405
|
||||
* search.c (lookup_field_1): Final scan goes backwards for
|
||||
types, forwards for non-types.
|
||||
|
||||
2003-04-17 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR c/10375
|
||||
|
@ -472,19 +472,23 @@ lookup_field_1 (tree type, tree name, bool want_type)
|
||||
|
||||
/* We might have a nested class and a field with the
|
||||
same name; we sorted them appropriately via
|
||||
field_decl_cmp, so just look for the last field with
|
||||
this name. */
|
||||
while (true)
|
||||
field_decl_cmp, so just look for the first or last
|
||||
field with this name. */
|
||||
if (want_type)
|
||||
{
|
||||
if (!want_type
|
||||
|| TREE_CODE (fields[i]) == TYPE_DECL
|
||||
|| DECL_CLASS_TEMPLATE_P (fields[i]))
|
||||
field = fields[i];
|
||||
if (i + 1 == hi || DECL_NAME (fields[i+1]) != name)
|
||||
break;
|
||||
i++;
|
||||
do
|
||||
field = fields[i--];
|
||||
while (i >= lo && DECL_NAME (fields[i]) == name);
|
||||
if (TREE_CODE (field) != TYPE_DECL
|
||||
&& !DECL_CLASS_TEMPLATE_P (field))
|
||||
field = NULL_TREE;
|
||||
}
|
||||
else
|
||||
{
|
||||
do
|
||||
field = fields[i++];
|
||||
while (i < hi && DECL_NAME (fields[i]) == name);
|
||||
}
|
||||
|
||||
return field;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2003-04-19 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/10405
|
||||
* g++.dg/lookup/struct-hack1.C: New test.
|
||||
|
||||
2003-04-20 Neil Booth <neil@daikokuya.co.uk>
|
||||
|
||||
* ucs.c: Update diagnostic messages.
|
||||
|
38
gcc/testsuite/g++.dg/lookup/struct-hack1.C
Normal file
38
gcc/testsuite/g++.dg/lookup/struct-hack1.C
Normal file
@ -0,0 +1,38 @@
|
||||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 19 Apr 2003 <nathan@codesourcery.com>
|
||||
|
||||
// PR 10405. ICE
|
||||
|
||||
#define MEM_ENUM(name) int name; enum name {};
|
||||
|
||||
struct Base
|
||||
{
|
||||
MEM_ENUM (a)
|
||||
MEM_ENUM (b)
|
||||
MEM_ENUM (c)
|
||||
MEM_ENUM (d)
|
||||
MEM_ENUM (e)
|
||||
MEM_ENUM (f)
|
||||
MEM_ENUM (g)
|
||||
MEM_ENUM (h)
|
||||
MEM_ENUM (i)
|
||||
MEM_ENUM (j)
|
||||
MEM_ENUM (k)
|
||||
MEM_ENUM (l)
|
||||
MEM_ENUM (m)
|
||||
MEM_ENUM (n)
|
||||
MEM_ENUM (o)
|
||||
MEM_ENUM (p)
|
||||
MEM_ENUM (q)
|
||||
MEM_ENUM (r)
|
||||
MEM_ENUM (s)
|
||||
MEM_ENUM (t)
|
||||
MEM_ENUM (u)
|
||||
MEM_ENUM (v)
|
||||
MEM_ENUM (w)
|
||||
};
|
||||
|
||||
struct D : Base {};
|
||||
|
Loading…
Reference in New Issue
Block a user