diff options
Diffstat (limited to 'gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c')
-rw-r--r-- | gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c new file mode 100644 index 000000000..674026d62 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr59358.c @@ -0,0 +1,44 @@ +/* PR tree-optimization/59358 */ + +__attribute__((noinline, noclone)) int +foo (int *x, int y) +{ + int z = *x; + if (y > z && y <= 16) + while (y > z) + z *= 2; + return z; +} + +int +main () +{ + int i; + for (i = 1; i < 17; i++) + { + int j = foo (&i, 16); + int k; + if (i >= 8 && i <= 15) + k = 16 + (i - 8) * 2; + else if (i >= 4 && i <= 7) + k = 16 + (i - 4) * 4; + else if (i == 3) + k = 24; + else + k = 16; + if (j != k) + __builtin_abort (); + j = foo (&i, 7); + if (i >= 7) + k = i; + else if (i >= 4) + k = 8 + (i - 4) * 2; + else if (i == 3) + k = 12; + else + k = 8; + if (j != k) + __builtin_abort (); + } + return 0; +} |