extern long foo (long, long, long (*) (long, long)); extern long use (long (*) (long, long), long, long); int main (void) { #ifndef NO_TRAMPOLINES long sum = 0; long i; long nested_0 (long a, long b) { if (a > 2 * b) return a - b; else return b - a; } long nested_1 (long a, long b) { return use (nested_0, b, a) + sum; } long nested_2 (long a, long b) { return nested_1 (b, a); } for (i = 0; i < 10; ++i) { long j; for (j = 0; j < 10; ++j) { long k; for (k = 0; k < 10; ++k) sum += foo (i, j > k ? j - k : k - j, nested_2); } } if ((sum & 0xffffffff) != 0xbecfcbf5) abort (); #endif exit (0); } long use (long (* func)(long, long), long a, long b) { return func (b, a); } long foo (long a, long b, long (* func) (long, long)) { return func (a, b); }