1 /* { dg-require-effective-target trampolines } */
2 
3 extern int foo (int, int, int (*) (int, int, int, int, int, int, int));
4 
5 int z;
6 
7 int
main(void)8 main (void)
9 {
10   int sum = 0;
11   int i;
12 
13   int nested (int a, int b, int c, int d, int e, int f, int g)
14     {
15       z = c + d + e + f + g;
16 
17       if (a > 2 * b)
18         return a - b;
19       else
20         return b - a;
21     }
22 
23   for (i = 0; i < 10; ++i)
24     {
25       int j;
26 
27       for (j = 0; j < 10; ++j)
28         {
29           int k;
30 
31           for (k = 0; k < 10; ++k)
32             sum += foo (i, j > k ? j - k : k - j, nested);
33         }
34     }
35 
36   if (sum != 2300)
37     abort ();
38 
39   if (z != 0x1b)
40     abort ();
41 
42   exit (0);
43 }
44 
45 int
foo(int a,int b,int (* fp)(int,int,int,int,int,int,int))46 foo (int a, int b, int (* fp) (int, int, int, int, int, int, int))
47 {
48   return fp (a, b, a, b, a, b, a);
49 }
50