modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr39100.c (about) 1 /* Bad PTA results (incorrect store handling) was causing us to delete 2 *na = 0 store. */ 3 4 typedef struct E 5 { 6 int p; 7 struct E *n; 8 } *EP; 9 10 typedef struct C 11 { 12 EP x; 13 short cn, cp; 14 } *CP; 15 16 __attribute__((noinline)) CP 17 foo (CP h, EP x) 18 { 19 EP pl = 0, *pa = &pl; 20 EP nl = 0, *na = &nl; 21 EP n; 22 23 while (x) 24 { 25 n = x->n; 26 if ((x->p & 1) == 1) 27 { 28 h->cp++; 29 *pa = x; 30 pa = &((*pa)->n); 31 } 32 else 33 { 34 h->cn++; 35 *na = x; 36 na = &((*na)->n); 37 } 38 x = n; 39 } 40 *pa = nl; 41 *na = 0; 42 h->x = pl; 43 return h; 44 } 45 46 int 47 main (void) 48 { 49 struct C c = { 0, 0, 0 }; 50 struct E e[2] = { { 0, &e[1] }, { 1, 0 } }; 51 EP p; 52 53 foo (&c, &e[0]); 54 if (c.cn != 1 || c.cp != 1) 55 __builtin_abort (); 56 if (c.x != &e[1]) 57 __builtin_abort (); 58 if (e[1].n != &e[0]) 59 __builtin_abort (); 60 if (e[0].n) 61 __builtin_abort (); 62 return 0; 63 } 64 65