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)9void baz (void) 10 { 11 __asm__ volatile ("" : : : "memory"); 12 } 13 g(int x)14static 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)28int 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)42int main(int argc, char** argv) 43 { 44 int v = 0; 45 return f(&v); 46 } 47