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

Reply via email to