| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-optimized" } */ |
| int g1(int); |
| int h(int *a, int *b)__attribute__((pure)); |
| void link_error(); |
| |
| /* The calls to link_error should be eliminated, since nothing escapes to |
| non-pure functions. */ |
| int g(void) |
| { |
| int t = 0, t1 = 2; |
| /* ??? That's not true. The pointers escape to the integer return |
| value which we do not track in PTA. */ |
| int t2 = h(&t, &t1); |
| if (t != 0) |
| link_error (); |
| if (t1 != 2) |
| link_error (); |
| /* ??? And it would finally escape here even if we did. */ |
| g1(t2); |
| if (t != 0) |
| link_error (); |
| if (t1 != 2) |
| link_error (); |
| return t2 == 2; |
| } |
| /* We are allowed to optimize the first two link_error calls. */ |
| /* { dg-final { scan-tree-dump-times "link_error" 2 "optimized" } } */ |