1 /* Verify that indirect inlining can also remove references of the functions it
2    discovers calls for, even when nodes being inlined are virtual IPA-CP
3    clones.  */
4 /* { dg-do compile } */
5 /* { dg-options "-O3 -fno-early-inlining -fdump-ipa-cp-details -fdump-ipa-inline -fdump-tree-optimized"  } */
6 
7 int global;
8 
9 void __attribute__ ((noinline, noclone, used))
stuff(int i)10 stuff (int i)
11 {
12   global = i;
13 }
14 
hooray()15 static void hooray ()
16 {
17   stuff (1);
18 }
19 
hiphip(void (* f)())20 static void hiphip (void (*f)())
21 {
22   stuff (2);
23   f ();
24 }
25 
main(void)26 int main (void)
27 {
28   hiphip (hooray);
29   return 0;
30 }
31 
32 /* { dg-final { scan-ipa-dump "removing its cloning-created reference"  "cp"  } } */
33 /* { dg-final { scan-ipa-dump "ipa-prop: Removed a reference"  "inline"  } } */
34 /* { dg-final { scan-tree-dump-not "hooray"  "optimized"  } } */
35