1 /* { dg-require-effective-target indirect_jumps } */
2 #include <setjmp.h>
3 
4 extern void abort (void);
5 extern void exit (int);
6 
7 static jmp_buf env;
8 
baz(void)9 void baz (void)
10 {
11   __asm__ volatile ("" : : : "memory");
12 }
13 
g(int x)14 static inline int g(int x)
15 {
16     if (x)
17     {
18         baz();
19         return 0;
20     }
21     else
22     {
23         baz();
24         return 1;
25     }
26 }
27 
f(int * e)28 int f(int *e)
29 {
30     if (*e)
31       return 1;
32 
33     int x = setjmp(env);
34     int n = g(x);
35     if (n == 0)
36       exit(0);
37     if (x)
38       abort();
39     longjmp(env, 42);
40 }
41 
main(int argc,char ** argv)42 int main(int argc, char** argv)
43 {
44     int v = 0;
45     return f(&v);
46 }
47