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 if (__builtin_setjmp (buf) == 0) 21 while (1) 22 { 23 last = 1; 24 raise0 (); 25 } 26 27 if (last == 0) 28 return 0; 29 else 30 return cmd; 31 } 32 main(void)33int main(void) 34 { 35 if (execute (1) == 0) 36 abort (); 37 38 return 0; 39 } 40