| /* { dg-do run } */ |
| /* { dg-options "-g" } */ |
| |
| void __attribute__((noinline)) |
| optimize_me_not () |
| { |
| __asm__ volatile ("" : : : "memory"); |
| } |
| char c, d = 22, f; |
| short e, g; |
| int h; |
| char(a)() {} |
| char(b)() { return 0; } |
| void i() { |
| char j; |
| for (; h < 1;) { |
| short k[9] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; |
| int l, i = 5; |
| short m[3] = {0, 0, 0}; |
| for (; h < 7; h++) |
| for (; d >= 33;) { |
| ++k[8]; |
| f = (c || a()) && g; |
| } |
| i++; |
| j = b() || m[2]; |
| l = 0; |
| for (; l <= 6; l = d) |
| e = k[8]; |
| /* i may very well be optimized out, so we cannot test for i == 6. |
| Instead test i + 1 which will make the test UNSUPPORTED if i |
| is optimized out. Since the test previously had wrong debug |
| with i == 5 this is acceptable. Optimally we'd produce a |
| debug stmt for the final value of the loop which would fix |
| the UNSUPPORTED cases. */ |
| optimize_me_not(); /* { dg-final { gdb-test . "i + 1" "7" } } */ |
| } |
| } |
| int main() { i(); } |