/* { dg-do run } */ /* { dg-options "-O2" } */ /* { dg-require-effective-target int32plus } */ void abort(void); int bar(int x, int y) { int x1, y1; int x2, y2; unsigned int x3, y3, w; int z = 1; x1 = (x < (1 << 30)); y1 = (y < (1 << 30)); if (x1) if (y1) { x2 = ((x > 0)? (x): -(x)); y2 = ((y > 0)? (y): -(y)); x3 = x2; y3 = y2; w = x3 * y3; if (w >= (1 << 30)) { z = 1; } else { z = -1; } } return z; } int main() { int x, y, z; x = 536870912; /* 2^29 */ y = 2; z = bar(x, y); if (z != 1) abort (); return 0; }