/* { dg-do compile } */ /* { dg-options "-O3 -fdump-ipa-cp-details" } */ typedef struct S { int add_offset; int (*call)(int); } S; extern const S *es, *fs; static int __attribute__((noinline)) foo (const S f, int x) { es = &f; /* This disables IPA-SRA */ x = f.call(x+f.add_offset); x = f.call(x); x = f.call(x); return x; } static int __attribute__((noinline)) bar (const S f, int x) { fs = &f; /* This disables IPA-SRA */ return foo (f, x); } static int sq (int x) { return x * x; } static const S s = {16, sq}; int h (int x) { return bar (s, x); } /* { dg-final { scan-ipa-dump-times "Discovered an indirect call to a known target" 3 "cp" } } */