1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-cp-details -fdump-tree-optimized-slim"  } */
3 /* { dg-add-options bind_pic_locally } */
4 
5 struct S
6 {
7   int a, b, c;
8 };
9 
10 void *blah(int, void *);
11 
12 static void __attribute__ ((noinline)) foo (int x, int z, struct S *p);
13 
14 static void __attribute__ ((noinline))
bar(int x,int z,struct S * p)15 bar (int x, int z, struct S *p)
16 {
17   foo (z, x, p);
18 }
19 
20 static void __attribute__ ((noinline))
foo(int x,int z,struct S * p)21 foo (int x, int z, struct S *p)
22 {
23   int i, c = p->c;
24   int b = p->b - z;
25   void *v = (void *) p;
26 
27   if (z)
28     {
29       z--;
30       bar (z, x, p);
31     }
32   for (i = 0; i< c; i++)
33     v = blah(b + x + i, v);
34 }
35 
36 void
entry(int c)37 entry (int c)
38 {
39   struct S s;
40   int i;
41 
42   for (i = 0; i<c; i++)
43     {
44       s.a = c;
45       s.b = 64;
46       s.c = 32;
47       foo (4, i, &s);
48     }
49 }
50 /* { dg-final { scan-ipa-dump-times "Clone of bar" 1 "cp" } } */
51 /* { dg-final { scan-ipa-dump-times "Clone of foo" 1 "cp" } } */
52 /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
53