1/* { dg-do run } */
2/* { dg-options "-O2 -fipa-icf" } */
3
4__attribute__ ((noinline, noclone))
5int 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))
14int 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))
23int f3 (void)
24{
25  return 1;
26}
27
28__attribute__ ((noinline, noclone))
29int f4 (void)
30{
31  return 2;
32}
33
34int
35main ()
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