https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71916
--- Comment #8 from Richard Henderson <rth at gcc dot gnu.org> --- (gdb) call debug_cfi_row(cur_row) .cfi_def_cfa 7, 16 .cfi_offset 3, -16 .cfi_offset 16, -8 (gdb) call debug_cfi_row(ti->beg_row) .cfi_def_cfa 7, 8 .cfi_offset 16, -8 (gdb) call debug_rtx(start) (code_label 377 83 109 25 46 "" [3 uses]) (gdb) call debug_rtx(origin) (jump_insn:TI 187 186 395 36 (set (pc) (if_then_else (ne (reg:CCZ 17 flags) (const_int 0 [0])) (label_ref:DI 377) (pc))) z.c:16 635 {*jcc_1} (expr_list:REG_DEAD (reg:CCZ 17 flags) (int_list:REG_BR_PROB 9500 (nil))) -> 377) On one code path we've saved RBX, and on another code path we haven't. The label in question appears in jump2, presumably jump threading, but I haven't actually traced the blocks to be sure this is true. I imagine it's got something to do with the infinite loop vs shrink-wrapping. We perhaps ought to have added a restore of RBX, but didn't because it doesn't appear to be needed.