modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr65956.c (about) 1 /* PR target/65956 */ 2 3 struct A { char *a; int b; long long c; }; 4 char v[3]; 5 6 __attribute__((noinline, noclone)) void 7 fn1 (char *x, char *y) 8 { 9 if (x != &v[1] || y != &v[2]) 10 __builtin_abort (); 11 v[1]++; 12 } 13 14 __attribute__((noinline, noclone)) int 15 fn2 (char *x) 16 { 17 asm volatile ("" : "+g" (x) : : "memory"); 18 return x == &v[0]; 19 } 20 21 __attribute__((noinline, noclone)) void 22 fn3 (const char *x) 23 { 24 if (x[0] != 0) 25 __builtin_abort (); 26 } 27 28 static struct A 29 foo (const char *x, struct A y, struct A z) 30 { 31 struct A r = { 0, 0, 0 }; 32 if (y.b && z.b) 33 { 34 if (fn2 (y.a) && fn2 (z.a)) 35 switch (x[0]) 36 { 37 case '|': 38 break; 39 default: 40 fn3 (x); 41 } 42 fn1 (y.a, z.a); 43 } 44 return r; 45 } 46 47 __attribute__((noinline, noclone)) int 48 bar (int x, struct A *y) 49 { 50 switch (x) 51 { 52 case 219: 53 foo ("+", y[-2], y[0]); 54 case 220: 55 foo ("-", y[-2], y[0]); 56 } 57 } 58 59 int 60 main () 61 { 62 struct A a[3] = { { &v[1], 1, 1LL }, { &v[0], 0, 0LL }, { &v[2], 2, 2LL } }; 63 bar (220, a + 2); 64 if (v[1] != 1) 65 __builtin_abort (); 66 return 0; 67 }