1/* { dg-do compile } */ 2/* { dg-options "-O2 -fdump-tree-optimized" } */ 3int g1(int); 4int h(int *a, int *b)__attribute__((pure)); 5void link_error(); 6 7/* The calls to link_error should be eliminated, since nothing escapes to 8 non-pure functions. */ 9int g(void) 10{ 11 int t = 0, t1 = 2; 12 /* ??? That's not true. The pointers escape to the integer return 13 value which we do not track in PTA. */ 14 int t2 = h(&t, &t1); 15 if (t != 0) 16 link_error (); 17 if (t1 != 2) 18 link_error (); 19 /* ??? And it would finally escape here even if we did. */ 20 g1(t2); 21 if (t != 0) 22 link_error (); 23 if (t1 != 2) 24 link_error (); 25 return t2 == 2; 26} 27/* We are allowed to optimize the first two link_error calls. */ 28/* { dg-final { scan-tree-dump-times "link_error" 2 "optimized" } } */ 29/* { dg-final { cleanup-tree-dump "optimized" } } */ 30