modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr40022.c (about) 1 extern void abort (void); 2 3 struct A 4 { 5 struct A *a; 6 }; 7 8 struct B 9 { 10 struct A *b; 11 }; 12 13 __attribute__((noinline)) 14 struct A * 15 foo (struct A *x) 16 { 17 asm volatile ("" : : "g" (x) : "memory"); 18 return x; 19 } 20 21 __attribute__((noinline)) 22 void 23 bar (struct B *w, struct A *x, struct A *y, struct A *z) 24 { 25 struct A **c; 26 c = &w->b; 27 *c = foo (x); 28 while (*c) 29 c = &(*c)->a; 30 *c = foo (y); 31 while (*c) 32 c = &(*c)->a; 33 *c = foo (z); 34 } 35 36 struct B d; 37 struct A e, f, g; 38 39 int 40 main (void) 41 { 42 f.a = &g; 43 bar (&d, &e, &f, 0); 44 if (d.b == 0 45 || d.b->a == 0 46 || d.b->a->a == 0 47 || d.b->a->a->a != 0) 48 abort (); 49 return 0; 50 } 51