1 /* { dg-do run } */
2 /* { dg-options "-O2 -fipa-icf" } */
3 
4 __attribute__ ((noinline, noclone))
f1(int x,int (* p1)(void),int (* p2)(void))5 int f1 (int x, int (*p1) (void), int (*p2) (void))
6 {
7   if (x)
8     return p1 ();
9   else
10     return p2 ();
11 }
12 
13 __attribute__ ((noinline, noclone))
f2(int x,int (* p1)(void),int (* p2)(void))14 int f2 (int x, int (*p1) (void), int (*p2) (void))
15 {
16   if (x)
17     return p2 ();
18   else
19     return p1 ();
20 }
21 
22 __attribute__ ((noinline, noclone))
f3(void)23 int f3 (void)
24 {
25   return 1;
26 }
27 
28 __attribute__ ((noinline, noclone))
f4(void)29 int f4 (void)
30 {
31   return 2;
32 }
33 
34 int
main()35 main ()
36 {
37   if (f1 (0, f3, f4) != 2 || f1 (1, f3, f4) != 1 || f2 (0, f3, f4) != 1
38       || f2 (1, f3, f4) != 2)
39     __builtin_abort ();
40   return 0;
41 }
42