On Mon, Oct 24, 2016 at 04:39:20PM +0200, Jakub Jelinek wrote:
> On Mon, Oct 24, 2016 at 04:34:40PM +0200, Marek Polacek wrote:
> > On Mon, Oct 24, 2016 at 08:18:25AM -0600, Martin Sebor wrote:
> > > > The case above is just a case where with -O GCC can figure out what the 
> > > > value
> > > > of a const-qualified variable is, see 
> > > > decl_constant_value_for_optimization.
> > > > Since the warning is implemented even before gimplifying, optimizations 
> > > > like
> > > > CP don't come into play yet.
> > > 
> > > Ah, okay.  That should limit the number of these false positives.
> > > (I saw -O2 in dg-options and assumed it was important.  It sounds
> > > like the test case should pass even with -O1).
> >  
> > Yep--even -O is enough.
> > 
> > > But even without constant propagation there will be similar cases
> > > (though probably less pervasive).  For instance, if j were defined
> > > to something like this:
> > > 
> > >   const int j = 4 == sizeof (size_t);
> > 
> > Well, I think the warning would still be desirable:
> > 
> >   const int j = 4 == sizeof (long);
> >   if (j == 0)
> >     {   
> >       if (i > 10) /* { dg-warning "this condition has identical branches" } 
> > */
> >         *p = j * 2 + 1;
> >       else
> >         *p = 1;
> >     }
> > 
> > Given the j == 0 check, the branches really are duplicated.  This is 
> > actually
> > a distilled version of what I found in gcov-io.c.
> 
> Are you hashing before folding or after folding?

After, e.g. I think build_modify_expr c_fully_fold operands.

> If before folding, you wouldn't complain about the gcov-io.c test.
> With folding, one can imagine something like:
>   const int a = sizeof (long);
>   const int b = sizeof (long long);
>   int c;
>   if (cond)
>     c = a;
>   else
>     c = b;
> or similar, where a and b can be the same on some targets and different on
> others.  I believe the warning is still useful, but it will probably be
> never false positive free.

Unfortunately :(.  Maybe tolerable for -Wextra, though.

        Marek

Reply via email to