@@ -2301,6 +2301,12 @@ remove_bb (basic_block bb)
}
new_bb = bb->prev_bb;
+ /* Don't move any labels into ENTRY block. */
+ if (new_bb == ENTRY_BLOCK_PTR_FOR_FN (cfun))
+ {
+ new_bb = single_succ (new_bb);
+ gcc_assert (new_bb != bb);
+ }
new_gsi = gsi_start_bb (new_bb);
gsi_remove (&i, false);
gsi_insert_before (&new_gsi, stmt, GSI_NEW_STMT);
@@ -0,0 +1,17 @@
+/* PR tree-optimization/84960 */
+/* { dg-do compile { target indirect_jumps } } */
+
+void
+foo (unsigned int a, float b, void *c)
+{
+lab:
+ if ((b - (a %= 0) < 1U) * -1U)
+ ;
+ else
+ {
+ unsigned int f = a;
+ __builtin_unreachable ();
+ c = &&lab;
+ }
+ goto *c;
+}