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.
Marek