/* 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; | |
} |