diff options
author | Joseph Myers <jsm@polyomino.org.uk> | 2004-10-10 01:47:20 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2004-10-10 01:47:20 +0100 |
commit | 216a5f1b3fd8bc312748ff226ab5e3c9c2db273c (patch) | |
tree | f192e170635c25ee19d58894e6355d869f6e0d82 /gcc/c-decl.c | |
parent | fb643d23f7fae28aa40eaacb0b23db038feece8e (diff) | |
download | gcc-216a5f1b3fd8bc312748ff226ab5e3c9c2db273c.zip gcc-216a5f1b3fd8bc312748ff226ab5e3c9c2db273c.tar.gz gcc-216a5f1b3fd8bc312748ff226ab5e3c9c2db273c.tar.bz2 |
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
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index a723c25..f2f9a27 100644 --- a/gcc/c-decl.c +++ b/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, |