| /* PR tree-optimization/118430 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-optimized" } */ |
| /* { dg-final { scan-tree-dump-times " bar \\\(\[^\n\r]\*\\\); \\\[tail call\\\]" 2 "optimized" } } */ |
| /* { dg-final { scan-tree-dump-times " freddy \\\(\[^\n\r]\*\\\); \\\[tail call\\\]" 2 "optimized" } } */ |
| |
| __attribute__ ((noipa)) void |
| foo (int x) |
| { |
| (void) x; |
| } |
| |
| __attribute__ ((noinline)) int |
| bar (int x) |
| { |
| foo (x); |
| return 1; |
| } |
| |
| __attribute__ ((noinline)) int |
| baz (int *x) |
| { |
| foo (*x); |
| return 2; |
| } |
| |
| __attribute__((noipa)) int |
| qux (int x) |
| { |
| { |
| int v; |
| foo (x); |
| baz (&v); |
| } |
| return bar (x); |
| } |
| |
| __attribute__((noipa)) int |
| corge (int x) |
| { |
| { |
| int v; |
| foo (x); |
| baz (&v); |
| } |
| bar (x); |
| return 1; |
| } |
| |
| __attribute__ ((noinline)) float |
| freddy (int x) |
| { |
| foo (x); |
| return 1.75f; |
| } |
| |
| __attribute__((noipa)) float |
| garply (int x) |
| { |
| { |
| int v; |
| foo (x); |
| baz (&v); |
| } |
| return freddy (x); |
| } |
| |
| __attribute__((noipa)) float |
| quux (int x) |
| { |
| { |
| int v; |
| foo (x); |
| baz (&v); |
| } |
| freddy (x); |
| return 1.75f; |
| } |
| |
| int v; |
| |
| int |
| main () |
| { |
| qux (v); |
| corge (v); |
| garply (v); |
| quux (v); |
| } |