https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79479
--- Comment #3 from Bruno Haible <bruno at clisp dot org> ---
(In reply to Marek Polacek from comment #2)
> int
> fn1 (long x)
> {
> if (0)
> return __INT_MAX__ + 1;
>
> if (x || 0)
> return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
>
> if (1 || 0)
> return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
The rest of fn1 is dead code (at least a good dataflow analysis would detect
it). How about splitting fn1 into several functions?
int
fn11 (long x)
{
if (0)
return __INT_MAX__ + 1;
return 0;
}
int
fn12 (long x)
{
if (x || 0)
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
return 0;
}
int
fn13 (long x)
{
if (1 || 0)
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
return 0;
}
int
fn14 (long x)
{
if (0 && 0)
return __INT_MAX__ + 1;
return 0;
}
int
fn15 (long x)
{
if (0)
return __INT_MAX__ + 1;
else
return 0;
}
int
fn16 (long x)
{
if (0)
return 0;
else
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
}
etc.