1 /* { dg-do run } */ 2 /* { dg-options "-fno-tree-sra" } */ 3 4 extern void abort (void); 5 struct Foo { 6 int *p; 7 }; 8 struct Bar { 9 struct Foo *x; 10 int *q; 11 }; 12 struct Foo __attribute__((noinline)) bar(int * p)13bar(int *p) 14 { 15 struct Foo f; 16 f.p = p; 17 return f; 18 } 19 void __attribute__((noinline)) foo(struct Foo f)20foo(struct Foo f) 21 { 22 *f.p = 0; 23 } main()24int main() 25 { 26 int a, b; 27 a = 0; 28 b = 1; 29 struct Bar f; 30 struct Foo g = bar (&b); 31 f.x = &g; 32 f.q = &a; 33 foo(*f.x); 34 if (b != 0) 35 abort (); 36 return 0; 37 } 38