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)11 void raise0(void)
12 {
13   __builtin_longjmp (buf, 1);
14 }
15 
execute(int cmd)16 int 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)33 int main(void)
34 {
35   if (execute (1) == 0)
36     abort ();
37 
38   return 0;
39 }
40