| /* { dg-require-effective-target trampolines } */ | |
| extern void abort (void); | |
| extern void exit (int); | |
| static void recursive (int n, void (*proc) (void)) | |
| { | |
| __label__ l1; | |
| void do_goto (void) | |
| { | |
| goto l1; | |
| } | |
| if (n == 3) | |
| recursive (n - 1, do_goto); | |
| else if (n > 0) | |
| recursive (n - 1, proc); | |
| else | |
| (*proc) (); | |
| return; | |
| l1: | |
| if (n == 3) | |
| exit (0); | |
| else | |
| abort (); | |
| } | |
| int main () | |
| { | |
| recursive (10, abort); | |
| abort (); | |
| } |