------- Comment #2 from hjl at lucon dot org 2007-08-25 20:38 ------- [EMAIL PROTECTED] 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; } [EMAIL PROTECTED] rrs]$ /export/gnu/import/rrs/127766/usr/bin/g++ -static -O2 cmov.cc [EMAIL PROTECTED] rrs]$ ./a.out Aborted [EMAIL PROTECTED] rrs]$ /export/gnu/import/rrs/127765/usr/bin/g++ -static -O2 cmov.cc [EMAIL PROTECTED] rrs]$ ./a.out [EMAIL PROTECTED] rrs]$ /export/gnu/import/rrs/127766/usr/bin/g++ -static -O2 cmov.cc -march=i686 -m32 [EMAIL PROTECTED] rrs]$ ./a.out Aborted [EMAIL PROTECTED] rrs]$ /export/gnu/import/rrs/127766/usr/bin/g++ -static -O2 cmov.cc -m32 [EMAIL PROTECTED] rrs]$ ./a.out [EMAIL PROTECTED] 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