1 /* { dg-do compile } */
2 /* { dg-options "-O -fipa-sra" } */
3 
4 struct A
5 {
6   int *p;
AA7   A() {p = (int *) -1;}
~AA8   ~A() {if (p && p != (int *) -1) *p = 0;}
9 };
10 
11 struct B
12 {
13   A a;
14   char data[23];
BB15   B() : a() {data[0] = 0;}
16 };
17 
18 extern A ga;
19 extern int *gi;
20 extern void *gz;
21 extern B *gb;
22 
foo(B * b,void * z)23 static int * __attribute__ ((noinline)) foo (B *b, void *z)
24 {
25   __builtin_memcpy (gz, z, 28);
26   ga = b->a;
27   return b->a.p;
28 }
29 
bar(B * b,void * z)30 int *bar (B *b, void *z)
31 {
32   gb = b;
33   return foo (b, z);
34 }
35