1
2extern long foo (long, long, long (*) (long, long));
3extern long use (long (*) (long, long), long, long);
4
5int
6main (void)
7{
8#ifndef NO_TRAMPOLINES
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#endif
46
47  exit (0);
48}
49
50long
51use (long (* func)(long, long), long a, long b)
52{
53  return func (b, a);
54}
55
56long
57foo (long a, long b, long (* func) (long, long))
58{
59  return func (a, b);
60}
61