re PR c/17189 (bogus warning for struct Foo { int; };)

PR c/17189
	* c-decl.c (grokfield): Make diagnostic for bad cases of unnamed
	fields a pedwarn.  Pedwarn here for unnamed structs/unions if
	pedantic.
	* c-parse.in (component_decl): Don't pedwarn here for unnamed
	fields.

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

From-SVN: r88834
This commit is contained in:
Joseph Myers 2004-10-10 01:47:20 +01:00 committed by Joseph Myers
parent fb643d23f7
commit 216a5f1b3f
5 changed files with 33 additions and 13 deletions

View File

@ -1,3 +1,12 @@
2004-10-10 Joseph S. Myers <jsm@polyomino.org.uk>
PR c/17189
* c-decl.c (grokfield): Make diagnostic for bad cases of unnamed
fields a pedwarn. Pedwarn here for unnamed structs/unions if
pedantic.
* c-parse.in (component_decl): Don't pedwarn here for unnamed
fields.
2004-10-09 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/17906

View File

@ -5003,27 +5003,29 @@ grokfield (struct c_declarator *declarator, struct c_declspecs *declspecs,
that took root before someone noticed the bug... */
tree type = declspecs->type;
bool type_ok = (TREE_CODE (type) == RECORD_TYPE
|| TREE_CODE (type) == UNION_TYPE);
bool ok = false;
if (type
&& (TREE_CODE (type) == RECORD_TYPE
|| TREE_CODE (type) == UNION_TYPE)
if (type_ok
&& (flag_ms_extensions || !declspecs->typedef_p))
{
if (flag_ms_extensions)
; /* ok */
ok = true;
else if (flag_iso)
goto warn_unnamed_field;
ok = false;
else if (TYPE_NAME (type) == NULL)
; /* ok */
ok = true;
else
goto warn_unnamed_field;
ok = false;
}
else
if (!ok)
{
warn_unnamed_field:
warning ("declaration does not declare anything");
pedwarn ("declaration does not declare anything");
return NULL_TREE;
}
if (pedantic)
pedwarn ("ISO C doesn't support unnamed structs/unions");
}
value = grokdeclarator (declarator, declspecs, FIELD, false,

View File

@ -1738,9 +1738,6 @@ component_decl:
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
MS P-SDK). */
if (pedantic)
pedwarn ("ISO C doesn't support unnamed structs/unions");
$$ = grokfield (build_id_declarator (NULL_TREE),
current_declspecs, NULL_TREE);
POP_DECLSPEC_STACK; }

View File

@ -1,3 +1,8 @@
2004-10-10 Joseph S. Myers <jsm@polyomino.org.uk>
PR c/17189
* gcc.dg/anon-struct-5.c: New test.
2004-10-09 Joseph S. Myers <jsm@polyomino.org.uk>
PR c/17844

View File

@ -0,0 +1,7 @@
/* Test bad warning for anonymous int in structure. Bug 17189. */
/* { dg-do compile } */
/* { dg-options "-std=c99 -pedantic-errors" } */
struct Foo { int; }; /* { dg-bogus "unnamed" } */
/* { dg-error "error: declaration does not declare anything" "int;" { target *-*-* } 5 } */
/* { dg-error "error: struct has no members" "no members" { target *-*-* } 5 } */