/* { dg-do run { target heap_trampoline } } */ | |
/* { dg-options "-ftrampoline-impl=heap" } */ | |
__attribute__((noipa)) int | |
bar (int (*fn) (int)) | |
{ | |
return fn (42) + 1; | |
} | |
int | |
main () | |
{ | |
int a = 0; | |
int foo (int x) { if (x != 42) __builtin_abort (); return ++a; } | |
if (bar (foo) != 2 || a != 1) | |
__builtin_abort (); | |
if (bar (foo) != 3 || a != 2) | |
__builtin_abort (); | |
a = 42; | |
if (bar (foo) != 44 || a != 43) | |
__builtin_abort (); | |
return 0; | |
} |