Consider this C test case:
const char *
f(long v)
{
if (v < 0)
v = - v;
if (v > 0x7fffffff)
return "negative";
else
return "positive";
}
When this is compiled with -O2, it always returns "positive". This is fine
because when v == LONG_MIN, negating it is undefined signed overflow. However,
the same is true when this is compiled with -O2 -fno-strict-overflow, which is
not fine. With -fno-strict-overflow, we can not assume that negating a signed
value yields a nonnegative number.
This bug is neither serious nor a regression, so I'm recording it here in order
to fix it for gcc 4.4.
--
Summary: -fno-strict-overflow fails to prevent use of signed
overflow
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ian at airs dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34943