re PR c/46889 (Missing diagnosis on duplicate struct member with anonymous union)

PR c/46889
	* c-decl.c (detect_field_duplicates): Ensure hash is used for
	finding duplicates when first field is anonymous.

testsuite:
	* gcc.dg/anon-struct-15.c: New test.

From-SVN: r168348
This commit is contained in:
Joseph Myers 2010-12-30 18:24:03 +00:00 committed by Joseph Myers
parent 08b2ba302b
commit b3c1008c10
4 changed files with 29 additions and 4 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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" } */
};