/* Verify that IPA-CP can make edges direct based on aggregate contents. */ /* { dg-do compile } */ /* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp -fdump-ipa-inline" } */ struct S { int i; void (*f)(struct S *); unsigned u; }; struct U { struct U *next; struct S s; short a[8]; }; extern void non_existent(struct S *p, int); static void hooray1 (struct S *p) { non_existent (p, 1); } static __attribute__ ((noinline)) void hiphip1 (struct S *p) { p->f (p); } int test1 (void) { struct S s; s.i = 1234; s.f = hooray1; s.u = 1001; hiphip1 (&s); return 0; } /* { dg-final { scan-ipa-dump "ipa-prop: Discovered an indirect call to a known target" "cp" } } */ /* { dg-final { scan-ipa-dump "hooray1\[^\\n\]*inline copy in hiphip1" "inline" } } */