[Bug c/79479] -Woverflow false alarm in unreachable expression
mpolacek at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Feb 13 15:33:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79479
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Generalized extended testcase:
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" } */
if (0 && 0)
return __INT_MAX__ + 1;
if (0)
return __INT_MAX__ + 1;
else
return 0;
if (0)
return 0;
else
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
if (0)
{
if (x)
return __INT_MAX__ + 1;
}
if (0)
{
if (x)
return __INT_MAX__ + 1;
}
else
{
if (x)
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
}
if (0)
if (0)
return __INT_MAX__ + 1;
if (1)
return 0;
else
return __INT_MAX__ + 1;
if (1)
if (0)
return __INT_MAX__ + 1;
if (1)
{
if (x)
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
}
else
{
if (x)
return __INT_MAX__ + 1;
}
if (0)
return __INT_MAX__ + 1;
else if (0)
return __INT_MAX__ + 1;
else
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
if (0)
return __INT_MAX__ + 1;
else if (1)
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
else
return __INT_MAX__ + 1;
if (1)
return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */
else if (0)
return __INT_MAX__ + 1;
return 0 ? __INT_MAX__ + 1 : 1;
}
void
fn2 (int x)
{
if (0)
x <<= sizeof (int) * __CHAR_BIT__;
if (0)
x <<= -1;
if (0)
x >>= sizeof (int) * __CHAR_BIT__;
if (0)
x >>= -1;
}
More information about the Gcc-bugs
mailing list