1 /* PR tree-optimization/49279 */
2 extern void abort (void);
3 
4 struct S { int a; int *__restrict p; };
5 
6 __attribute__((noinline, noclone))
bar(struct S * p)7 struct S *bar (struct S *p)
8 {
9   struct S *r;
10   asm volatile ("" : "=r" (r) : "0" (p) : "memory");
11   return r;
12 }
13 
14 __attribute__((noinline, noclone))
15 int
foo(int * p,int * q)16 foo (int *p, int *q)
17 {
18   struct S s, *t;
19   s.a = 1;
20   s.p = p;
21   t = bar (&s);
22   t->p = q;
23   s.p[0] = 0;
24   t->p[0] = 1;
25   return s.p[0];
26 }
27 
28 int
main()29 main ()
30 {
31   int a, b;
32   if (foo (&a, &b) != 1)
33     abort ();
34   return 0;
35 }
36