| /* PR tree-optimization/49279 */ | |
| extern void abort (void); | |
| struct S { int a; int *__restrict p; }; | |
| __attribute__((noinline, noclone)) | |
| struct S *bar (struct S *p) | |
| { | |
| struct S *r; | |
| asm volatile ("" : "=r" (r) : "0" (p) : "memory"); | |
| return r; | |
| } | |
| __attribute__((noinline, noclone)) | |
| int | |
| foo (int *p, int *q) | |
| { | |
| struct S s, *t; | |
| s.a = 1; | |
| s.p = p; | |
| t = bar (&s); | |
| t->p = q; | |
| s.p[0] = 0; | |
| t->p[0] = 1; | |
| return s.p[0]; | |
| } | |
| int | |
| main () | |
| { | |
| int a, b; | |
| if (foo (&a, &b) != 1) | |
| abort (); | |
| return 0; | |
| } |