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