+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
/* 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;
}
}
+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.
--- /dev/null
+// { 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 {};
+