[Bug middle-end/33181] [4.3 Regression] Revision 127766 generates bad cmov
hjl at lucon dot org
gcc-bugzilla@gcc.gnu.org
Sat Aug 25 20:39:00 GMT 2007
------- Comment #2 from hjl at lucon dot org 2007-08-25 20:38 -------
[hjl@gnu-28 rrs]$ cat cmov.cc
#include <stdlib.h>
const double infinity = 1e100;
enum Status
{
P_ON_LOWER = -4,
P_ON_UPPER = -2,
P_FREE = -1,
P_FIXED = P_ON_UPPER + P_ON_LOWER
};
void
foo (enum Status & stat, double newUpper, double lower)
{
switch (stat)
{
case P_ON_UPPER:
if (newUpper >= infinity)
stat = (lower <= -infinity)
? P_FREE
: P_ON_LOWER;
else if (newUpper == lower)
stat = P_FIXED;
break;
default:
abort();
}
}
int
main ()
{
enum Status stat = P_ON_UPPER;
foo (stat, 5.000000e+01, -1.000000e+100);
if (stat != P_ON_UPPER)
abort ();
return 0;
}
[hjl@gnu-28 rrs]$ /export/gnu/import/rrs/127766/usr/bin/g++ -static -O2 cmov.cc
[hjl@gnu-28 rrs]$ ./a.out
Aborted
[hjl@gnu-28 rrs]$ /export/gnu/import/rrs/127765/usr/bin/g++ -static -O2 cmov.cc
[hjl@gnu-28 rrs]$ ./a.out
[hjl@gnu-28 rrs]$ /export/gnu/import/rrs/127766/usr/bin/g++ -static -O2 cmov.cc
-march=i686 -m32
[hjl@gnu-28 rrs]$ ./a.out
Aborted
[hjl@gnu-28 rrs]$ /export/gnu/import/rrs/127766/usr/bin/g++ -static -O2 cmov.cc
-m32
[hjl@gnu-28 rrs]$ ./a.out
[hjl@gnu-28 rrs]$
--
hjl at lucon dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[4.3 Regression] Revision |[4.3 Regression] Revision
|127766 miscompiles SPEC CPU |127766 generates bad cmov
|2006 |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33181
More information about the Gcc-bugs
mailing list