modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/nestfunc-3.c (about) 1 /* { dg-require-effective-target trampolines } */ 2 3 extern long foo (long, long, long (*) (long, long)); 4 extern long use (long (*) (long, long), long, long); 5 6 int 7 main (void) 8 { 9 long sum = 0; 10 long i; 11 12 long nested_0 (long a, long b) 13 { 14 if (a > 2 * b) 15 return a - b; 16 else 17 return b - a; 18 } 19 20 long nested_1 (long a, long b) 21 { 22 return use (nested_0, b, a) + sum; 23 } 24 25 long nested_2 (long a, long b) 26 { 27 return nested_1 (b, a); 28 } 29 30 for (i = 0; i < 10; ++i) 31 { 32 long j; 33 34 for (j = 0; j < 10; ++j) 35 { 36 long k; 37 38 for (k = 0; k < 10; ++k) 39 sum += foo (i, j > k ? j - k : k - j, nested_2); 40 } 41 } 42 43 if ((sum & 0xffffffff) != 0xbecfcbf5) 44 abort (); 45 46 exit (0); 47 } 48 49 long 50 use (long (* func)(long, long), long a, long b) 51 { 52 return func (b, a); 53 } 54 55 long 56 foo (long a, long b, long (* func) (long, long)) 57 { 58 return func (a, b); 59 }