/* PR tree-optimization/60003 */ | |
extern void abort (void); | |
unsigned long long jmp_buf[5]; | |
__attribute__((noinline, noclone)) void | |
baz (void) | |
{ | |
__builtin_longjmp (&jmp_buf, 1); | |
} | |
void | |
bar (void) | |
{ | |
baz (); | |
} | |
__attribute__((noinline, noclone)) int | |
foo (int x) | |
{ | |
int a = 0; | |
if (__builtin_setjmp (&jmp_buf) == 0) | |
{ | |
while (1) | |
{ | |
a = 1; | |
bar (); /* OK if baz () instead */ | |
} | |
} | |
else | |
{ | |
if (a == 0) | |
return 0; | |
else | |
return x; | |
} | |
} | |
int | |
main () | |
{ | |
if (foo (1) == 0) | |
abort (); | |
return 0; | |
} |