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)13foo (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)23sq (int x) 24 { 25 return x * x; 26 } 27 28 static const S s = {16, sq}; 29 30 int h(int x)31h (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