/* { dg-do run } */ /* { dg-options "-O2 -fipa-icf" } */ __attribute__ ((noinline, noclone)) int f1 (int x, int (*p1) (void), int (*p2) (void)) { if (x) return p1 (); else return p2 (); } __attribute__ ((noinline, noclone)) int f2 (int x, int (*p1) (void), int (*p2) (void)) { if (x) return p2 (); else return p1 (); } __attribute__ ((noinline, noclone)) int f3 (void) { return 1; } __attribute__ ((noinline, noclone)) int f4 (void) { return 2; } int main () { if (f1 (0, f3, f4) != 2 || f1 (1, f3, f4) != 1 || f2 (0, f3, f4) != 1 || f2 (1, f3, f4) != 2) __builtin_abort (); return 0; }