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
...