1 extern void abort(void); 2 3 struct foo { 4 int rank; 5 char *name; 6 }; 7 8 struct mem { 9 struct foo *x[4]; 10 }; 11 bar(struct foo ** f)12void __attribute__((noinline)) bar(struct foo **f) 13 { 14 *f = __builtin_malloc(sizeof(struct foo)); 15 } foo(int rank)16struct foo * __attribute__((noinline, noclone)) foo(int rank) 17 { 18 void *x = __builtin_malloc(sizeof(struct mem)); 19 struct mem *as = x; 20 struct foo **upper = &as->x[rank * 8 - 5]; 21 *upper = 0; 22 bar(upper); 23 return *upper; 24 } 25 main()26int main() 27 { 28 if (foo(1) == 0) 29 abort (); 30 return 0; 31 } 32