PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / nestfunc-3.c
blob2bdfece9c5be5c36f7cb41d4232466fc3e34f392
1 /* { dg-require-effective-target trampolines } */
3 extern long foo (long, long, long (*) (long, long));
4 extern long use (long (*) (long, long), long, long);
6 int
7 main (void)
9 long sum = 0;
10 long i;
12 long nested_0 (long a, long b)
14 if (a > 2 * b)
15 return a - b;
16 else
17 return b - a;
20 long nested_1 (long a, long b)
22 return use (nested_0, b, a) + sum;
25 long nested_2 (long a, long b)
27 return nested_1 (b, a);
30 for (i = 0; i < 10; ++i)
32 long j;
34 for (j = 0; j < 10; ++j)
36 long k;
38 for (k = 0; k < 10; ++k)
39 sum += foo (i, j > k ? j - k : k - j, nested_2);
43 if ((sum & 0xffffffff) != 0xbecfcbf5)
44 abort ();
46 exit (0);
49 long
50 use (long (* func)(long, long), long a, long b)
52 return func (b, a);
55 long
56 foo (long a, long b, long (* func) (long, long))
58 return func (a, b);