aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-decl.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/anon-struct-15.c16
4 files changed, 29 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fbe61e3..8eff4b3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-30 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/46889
+ * c-decl.c (detect_field_duplicates): Ensure hash is used for
+ finding duplicates when first field is anonymous.
+
2010-12-30 Nathan Froyd <froydnj@codesourcery.com>
PR target/44606
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 40fccbe..4d24c60 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -6805,11 +6805,9 @@ detect_field_duplicates (tree fieldlist)
/* First, see if there are more than "a few" fields.
This is trivially true if there are zero or one fields. */
- if (!fieldlist)
- return;
- x = DECL_CHAIN (fieldlist);
- if (!x)
+ if (!fieldlist || !DECL_CHAIN (fieldlist))
return;
+ x = fieldlist;
do {
timeout--;
if (DECL_NAME (x) == NULL_TREE
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 25c2b8e..a14d416 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-12-30 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/46889
+ * gcc.dg/anon-struct-15.c: New test.
+
2010-12-30 Nathan Froyd <froydnj@codesourcery.com>
PR target/44606
diff --git a/gcc/testsuite/gcc.dg/anon-struct-15.c b/gcc/testsuite/gcc.dg/anon-struct-15.c
new file mode 100644
index 0000000..d9e786a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/anon-struct-15.c
@@ -0,0 +1,16 @@
+/* Test diagnostics for duplicate field names involving anonymous
+ struct or union as first field. PR 46889. */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+struct foo {
+ union {
+ struct {
+ unsigned long time_stamp;
+ };
+ struct {
+ int *page;
+ };
+ };
+ int *page; /* { dg-error "duplicate member" } */
+};