https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71876
--- Comment #2 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- test case for the ECF_LEAF: test.c: int setjmp(void); static int x; void foo(int z) { x = z; } int bar(void) { int z = x; setjmp(); z += x; return z; } gcc -O3 -S -ffreestanding test.c bar: .LFB1: .cfi_startproc subq $24, %rsp .cfi_def_cfa_offset 32 movl x(%rip), %eax movl %eax, 12(%rsp) call setjmp movl 12(%rsp), %eax addq $24, %rsp .cfi_def_cfa_offset 8 addl %eax, %eax ret .cfi_endproc but the free-standing setjmp function could call back to foo.