/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-optimized" } */ /* PR test case. */ int b = 10; int c; char e; void foo(); static char(a)(char f, char g) { return f && g == 1 ? 0 : f % g; } short(d)(short f, short g) { return f * g; } int main() { short h; int i; unsigned j; h = d(b && c, 5); j = h; i = a(h, 237); unsigned k = i; e = i < 0 || k >= 32 ? 0 : i >> k; if (e) { c = 0; foo(); } } /* Also Check that small ranges are broken down and optimized properly This function should never call foo (). */ int otherfunc (int x, int z) { if (x < 1 || x > 6 ) return 0; if (x == z) { if (x >> z > 0) foo (); if (x * z > 26 && x * z < 35) foo (); if (x + z == 5) foo (); if ((x + z) % 2 == 1) foo (); if (x / z != 1) foo (); } return 0; } /* { dg-final { scan-tree-dump-not "foo" "optimized" } } */