1 /* { dg-do run } */ 2 /* { dg-require-effective-target stdint_types } */ 3 /* { dg-options "-fdump-tree-alias" } */ 4 /* { dg-skip-if "" { *-*-* } { "-O0" "-fno-fat-lto-objects" } { "" } } */ 5 6 #include <stdint.h> 7 8 int i; bar(int *** p)9uintptr_t __attribute__((noinline,const)) bar(int ***p) { return (uintptr_t)p; } 10 void __attribute__((noinline)) foo(void)11foo(void) 12 { 13 int *y; 14 int **a = &y, **x; 15 int ***p; 16 uintptr_t b; 17 b = bar(&a); 18 p = (int ***)b; 19 x = *p; 20 *x = &i; /* *ANYTHING = &i has to make sure that y points to i. */ 21 *y = 0; 22 } 23 extern void abort (void); main()24int main() 25 { 26 i = 1; 27 foo (); 28 if (i != 0) 29 abort (); 30 return 0; 31 } 32 33 /* { dg-final { scan-tree-dump "y.._. = { i }" "alias" } } */ 34 /* { dg-final { scan-tree-dump "y.._., points-to NULL, points-to vars: { D..... }" "alias" } } */ 35