https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78098
--- Comment #13 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to H.J. Lu from comment #12) > (In reply to Martin Liška from comment #10) > > (In reply to H.J. Lu from comment #9) > > > (In reply to Richard Biener from comment #6) > > > > Why would we be not able to tailcall in an interupt handler? > > > > > > We need to verify that the only instruction in an interrupt handler > > > is a tail call to another interrupt handler. On the other hand, > > > this interrupt handler isn't really needed at all. > > > > That can be vefief by fact that the symbol should have only one call (tail > > call) and set node->icf_merged == true. > > Another issue with ICF tail call: > > ;; Function foo1 (foo1, funcdef_no=3, decl_uid=1443, cgraph_uid=0, > symbol_order=0) > > foo1 (void * p) > { > ;; basic block 2, loop depth 0 > ;; pred: ENTRY > foo2 (p_2(D)); [tail call] > ^^^^^^^^^^^^^^^^^^^^^^^^^^^ This isn't the same as sibcall. > return; > ^^^^^^ Here is a return statement. > ;; succ: EXIT > > } If I remember correctly, this is gimple representation of the tail-call. If you look at the generated binary, you'll see really just the jump instruction: foo2: .LFB1: .cfi_startproc movl $4276093056, %eax movl $0, (%rax) ret .cfi_endproc .LFE1: .size foo2, .-foo2 .p2align 4,,15 .globl foo1 .type foo1, @function foo1: .LFB3: .cfi_startproc jmp foo2 .cfi_endproc