1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fdump-ipa-cp-details" } */
3 
4 typedef struct S
5 {
6   int add_offset;
7   int (*call)(int);
8 } S;
9 
10 extern const S *es;
11 
12 static int  __attribute__((noinline))
foo(const S f,int x)13 foo (const S f, int x)
14 {
15   es = &f; 			/* This disables IPA-SRA */
16   x = f.call(x+f.add_offset);
17   x = f.call(x);
18   x = f.call(x);
19   return x;
20 }
21 
22 static int
sq(int x)23 sq (int x)
24 {
25   return x * x;
26 }
27 
28 static const S s = {16, sq};
29 
30 int
h(int x)31 h (int x)
32 {
33   return foo (s, x);
34 }
35 
36 /* { dg-final { scan-ipa-dump "Discovered an indirect call to a known target" "cp" } } */
37 /* { dg-final { scan-ipa-dump-times "Discovered an indirect call to a known target" 3 "cp" } } */
38