1 /* { dg-do run } */ 2 /* { dg-options "-O" } */ 3 /* { dg-require-effective-target indirect_jumps } */ 4 5 #include <setjmp.h> 6 7 extern void abort (void); 8 9 jmp_buf buf; 10 raise0(void)11void raise0(void) 12 { 13 __builtin_longjmp (buf, 1); 14 } 15 execute(int cmd)16int execute(int cmd) 17 { 18 int last = 0; 19 20 __builtin_setjmp (buf); 21 22 if (last == 0) 23 while (1) 24 { 25 last = 1; 26 raise0 (); 27 } 28 29 if (last == 0) 30 return 0; 31 else 32 return cmd; 33 } 34 main(void)35int main(void) 36 { 37 if (execute (1) == 0) 38 abort (); 39 40 return 0; 41 } 42