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 7int global; 8 9void __attribute__ ((noinline, noclone, used)) 10stuff (int i) 11{ 12 global = i; 13} 14 15static void hooray () 16{ 17 stuff (1); 18} 19 20static void hiphip (void (*f)()) 21{ 22 stuff (2); 23 f (); 24} 25 26int 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/* { dg-final { cleanup-ipa-dump "cp" } } */ 36/* { dg-final { cleanup-ipa-dump "inline" } } */ 37/* { dg-final { cleanup-tree-dump "optimized" } } */ 38