1 /* { dg-do run } */
2 /* { dg-require-effective-target trampolines } */
3 
4 extern void abort (void);
5 extern void exit (int);
6 
recursive(int n,void (* proc)(void))7 static void recursive (int n, void (*proc) (void))
8 {
9   __label__ l1;
10 
11   void do_goto (void)
12   {
13     goto l1;
14   }
15 
16   if (n == 3)
17       recursive (n - 1, do_goto);
18   else if (n > 0)
19     recursive (n - 1, proc);
20   else
21     (*proc) ();
22   return;
23 
24 l1:
25   if (n == 3)
26     exit (0);
27   else
28     abort ();
29 }
30 
main()31 int main ()
32 {
33   recursive (10, abort);
34   abort ();
35 }
36