1 /* { dg-require-effective-target trampolines } */ 2 3 extern void abort (void); 4 extern void exit (int); 5 recursive(int n,void (* proc)(void))6static 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()30int main () 31 { 32 recursive (10, abort); 33 abort (); 34 } 35