On Tue, Nov 11, 2014 at 11:27:21PM +0530, Prathamesh Kulkarni wrote: > I tried the following: > struct A { struct B {}; int x; } /* { dg-warning "empty struct has > size 0 in C" } */ > /* { dg-bogus "delcaration > does not declare anything" } */ > but it fails in excess errors. > How do I resolve this ? Try something like /* { dg-warning "empty struct has size 0 in C|declaration does not declare anything" } */
> Index: gcc/c/c-decl.c > =================================================================== > --- gcc/c/c-decl.c (revision 217287) > +++ gcc/c/c-decl.c (working copy) > @@ -7506,12 +7506,28 @@ > /* Finish up struct info used by -Wc++-compat. */ > > static void > -warn_cxx_compat_finish_struct (tree fieldlist) > +warn_cxx_compat_finish_struct (tree fieldlist, enum tree_code code, > location_t record_loc) This line is too long, please indent the last argument properly on next line. > unsigned int ix; > tree x; > struct c_binding *b; > > + if (fieldlist == NULL_TREE) > + { > + if (code == RECORD_TYPE) > + { > + warning_at (record_loc, OPT_Wc___compat, > + "empty struct has size 0 in C, size 1 in C++"); > + } > + else if (code == UNION_TYPE) > + { > + warning_at (record_loc, OPT_Wc___compat, > + "empty union has size 0 in C, size 1 in C++"); > + } Drop the { } around warning_at's. > + else > + gcc_unreachable (); > + } > + I don't think this is needed. Thanks, Marek