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