On Mon, Aug 11, 2014 at 08:19:52PM +0000, Joseph S. Myers wrote:
> On Sat, 9 Aug 2014, Marek Polacek wrote:
> 
> > +  /* Maybe we want to issue the C90/C99 compat warning, which is more
> > +     specific than -pedantic.  */
> > +  if (warn_c90_c99_compat > 0)
> >      {
> >        diagnostic_set_info (&diagnostic, gmsgid, &ap, location, DK_WARNING);
> 
> That seems wrong; it means that -Wc90-c99-compat turns errors from 
> -pedantic-errors into warnings.  E.g.
> 
> const const int i;
> 
> with -std=c90 -pedantic-errors gets an error, but (with this patch 
> applied) with -Wc90-c99-compat it becomes a warning.
> 
> (In view of this problem I haven't reviewed the rest of this patch.)

Ah, ok, I thought that this is desirable.  I'll adjust it.
 
> > diff --git gcc/gcc/c/c-parser.c gcc/gcc/c/c-parser.c
> > index ca8577c..454f279 100644
> > --- gcc/gcc/c/c-parser.c
> > +++ gcc/gcc/c/c-parser.c
> > @@ -1073,7 +1073,10 @@ disable_extension_diagnostics (void)
> >          | (warn_long_long << 4)
> >          | (warn_cxx_compat << 5)
> >          | (warn_overlength_strings << 6)
> > -        | (warn_c90_c99_compat << 7));
> > +        /* warn_c90_c99_compat has three states: -1/0/1, so we must
> > +           play tricks to properly restore it.  */
> > +        | (warn_c90_c99_compat << 7)
> > +        | ((warn_c90_c99_compat == -1) << 8));
> 
> This doesn't make sense to me either.  You're left-shifting a negative 
> value (undefined behavior in ISO C, so should be avoided anyway), and left 
> shifting -1 means that all the bits to the left of bit 7 in the result 
> will also be set so can't be used to carry any other information (in 
> particular bit 8 will be set, so this code will in fact work, but by 
> accident).

Oops, sneaky.  I haven't noticed that when I made warn_c90_c99_compat be
initialized to -1 :(.

The patch for -Wc99-c11-compat I posted today has the same issues, so
please ignore that one for now - I'll send a better version tomorrow.

        Marek

Reply via email to