https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63595
--- Comment #8 from Martin Liška <marxin at gcc dot gnu.org> --- Same problem can be even seen on x86_64-linux-pc: _ZNK13TriangulationILi3EE3endEv: .LFB5569: .cfi_startproc >>>>> subq $24, %rsp .cfi_def_cfa_offset 32 movq %rsp, %rdi call _ZNK13TriangulationILi3EE8end_quadEv addq $24, %rsp .cfi_def_cfa_offset 8 ret .cfi_endproc _ZNK13TriangulationILi3EE8end_quadEv: .LFB2586: .loc 3 2901 0 .cfi_startproc .LVL898: .loc 3 2901 0 movq %rdi, %rax .LBB27759: .LBB27760: .LBB27761: .LBB27762: .loc 14 41 0 movl $-1, (%rdi) movl $-1, 4(%rdi) movq %rsi, 8(%rdi) .LBE27762: .LBE27761: .LBE27760: .LBE27759: .loc 3 2905 0 ret .cfi_endproc Body of the function is created as tail-call trunk by IPA-ICF: Triangulation<dim>::raw_cell_iterator Triangulation<dim>::end() const [with int dim = 3; Triangulation<dim>::raw_cell_iterator = TriaRawIterator<3, CellAccessor<3> >] (const struct Triangulation * const this) { ;; basic block 2, loop depth 0 ;; pred: ENTRY Triangulation<3>::end_quad (this_2(D)); [tail call] return; ;; succ: EXIT } ;; Generating RTL for gimple basic block 2 ;; Triangulation<3>::end_quad (this_2(D)); [tail call] (insn 7 6 8 (parallel [ (set (reg:DI 85) (plus:DI (reg/f:DI 78 virtual-stack-vars) (const_int -16 [0xfffffffffffffff0]))) (clobber (reg:CC 17 flags)) ]) -1 (nil)) (insn 8 7 9 (set (reg:DI 4 si) (reg/f:DI 84 [ this ])) -1 (nil)) (insn 9 8 10 (set (reg:DI 5 di) (reg:DI 85)) -1 (nil)) (call_insn 10 9 0 (call (mem:QI (symbol_ref/i:DI ("_ZNK13TriangulationILi3EE8end_quadEv") [flags 0x1] <function_decl 0x7ff17d629bd0 end_quad>) [0 end_quad S1 A8]) (const_int 0 [0])) -1 (expr_list:REG_CALL_DECL (symbol_ref/i:DI ("_ZNK13TriangulationILi3EE8end_quadEv") [flags 0x1] <function_decl 0x7ff17d629bd0 end_quad>) (expr_list:REG_EH_REGION (const_int 0 [0]) (nil))) (expr_list:DI (use (reg:DI 5 di)) (expr_list:DI (use (reg:DI 4 si)) (nil))))