[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