/* { dg-do run } */ /* { dg-options "-O2" } */ void abort (void) __attribute__ ((noreturn)); float __attribute__((noinline)) f(float a, int b) { return a - (((float)b / 0x7fffffff) * 100); } int main (void) { float a[] = { 100.0, 0.0, 0.0}; int b[] = { 0x7fffffff, 0x7fffffff/100.0f, -0x7fffffff / 100.0f}; float c[] = { 0.0, -1.0, 1.0 }; int i; for (i = 0; i < (sizeof(a) / sizeof (float)); i++) if (f (a[i], b[i]) != c[i]) abort (); return 0; }