1extern void abort(void);
2
3struct foo {
4  int rank;
5  char *name;
6};
7
8struct mem {
9  struct foo *x[4];
10};
11
12void __attribute__((noinline)) bar(struct foo **f)
13{
14  *f = __builtin_malloc(sizeof(struct foo));
15}
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
26int main()
27{
28  if (foo(1) == 0)
29    abort ();
30  return 0;
31}
32