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)12 void __attribute__((noinline)) bar(struct foo **f)
13 {
14   *f = __builtin_malloc(sizeof(struct foo));
15 }
foo(int rank)16 struct 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()26 int main()
27 {
28   if (foo(1) == 0)
29     abort ();
30   return 0;
31 }
32