@@ -7098,7 +7098,13 @@ emit_insn_group_barriers (FILE *dump)
if (dump)
fprintf (dump, "Emitting stop before label %d\n",
INSN_UID (last_label));
- emit_insn_before (gen_insn_group_barrier (GEN_INT (3)), last_label);
+ insn
+ = emit_insn_before (gen_insn_group_barrier (GEN_INT (3)),
+ last_label);
+ /* If we emit the group barrier before BB_HEAD, it should
+ be outside of any bb. */
+ if (BB_HEAD (BLOCK_FOR_INSN (last_label)) == last_label)
+ BLOCK_FOR_INSN (insn) = NULL;
insn = last_label;
init_insn_group_barriers ();
@@ -10157,28 +10157,28 @@ vt_initialize (void)
insns that might be before it too. Unfortunately,
BB_HEADER and BB_FOOTER are not set while we run this
pass. */
- insn = get_first_insn (bb);
- for (rtx_insn *next;
- insn != BB_HEAD (bb->next_bb)
- ? next = NEXT_INSN (insn), true : false;
+ rtx_insn *next;
+ bool outside_bb = true;
+ for (insn = get_first_insn (bb); insn != BB_HEAD (bb->next_bb);
insn = next)
{
+ next = NEXT_INSN (insn);
+ if (insn == BB_HEAD (bb))
+ outside_bb = false;
if (INSN_P (insn))
{
basic_block save_bb = BLOCK_FOR_INSN (insn);
if (!BLOCK_FOR_INSN (insn))
{
+ gcc_assert (outside_bb);
BLOCK_FOR_INSN (insn) = bb;
- gcc_assert (DEBUG_INSN_P (insn));
- /* Reset debug insns between basic blocks.
- Their location is not reliable, because they
- were probably not maintained up to date. */
- if (DEBUG_BIND_INSN_P (insn))
- INSN_VAR_LOCATION_LOC (insn)
- = gen_rtx_UNKNOWN_VAR_LOC ();
}
else
gcc_assert (BLOCK_FOR_INSN (insn) == bb);
+ /* Verify debug bind insns don't occur outside of bbs. */
+ gcc_assert (!DEBUG_BIND_INSN_P (insn) || !outside_bb);
+ if (insn == BB_END (bb))
+ outside_bb = true;
if (!frame_pointer_needed)
{
@@ -10255,6 +10255,8 @@ vt_initialize (void)
}
BLOCK_FOR_INSN (insn) = save_bb;
}
+ else if (insn == BB_END (bb))
+ outside_bb = true;
}
gcc_assert (offset == VTI (bb)->out.stack_adjust);
}
@@ -0,0 +1,12 @@
+/* PR bootstrap/83396 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -g" } */
+
+int bar (int);
+int baz (int);
+
+int
+foo (int x)
+{
+ return bar (x) || baz (x) != 0;
+}