https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95574
--- Comment #7 from Tom de Vries <vries at gcc dot gnu.org> --- A bit more subtle: ... diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 899a5c0290d..f94eb38f797 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -8880,6 +8880,10 @@ emit_note_insn_var_location (variable **varp, emit_note_data *data) if (where != EMIT_NOTE_BEFORE_INSN) { + if (CALL_P (insn) && where == EMIT_NOTE_AFTER_CALL_INSN + && find_reg_note (insn, REG_NORETURN, NULL)) + goto done; + note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn); if (where == EMIT_NOTE_AFTER_CALL_INSN) NOTE_DURING_CALL_P (note) = true; @@ -8901,6 +8905,7 @@ emit_note_insn_var_location (variable **varp, emit_note_data *data) } NOTE_VAR_LOCATION (note) = note_vl; + done: set_dv_changed (var->dv, false); gcc_assert (var->in_changed_variables); var->in_changed_variables = false; ... which gets us: ... .loc 1 12 5 view .LVU13 call abort .LVL5: .cfi_endproc ...