mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-22 08:59:10 +08:00
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:
parent
fb643d23f7
commit
216a5f1b3f
@ -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
|
||||
|
22
gcc/c-decl.c
22
gcc/c-decl.c
@ -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,
|
||||
|
@ -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; }
|
||||
|
@ -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
|
||||
|
7
gcc/testsuite/gcc.dg/anon-struct-5.c
Normal file
7
gcc/testsuite/gcc.dg/anon-struct-5.c
Normal 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 } */
|
Loading…
Reference in New Issue
Block a user