+2018-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/84960
+ * tree-cfg.c (remove_bb): Don't move forced labels into bb->prev_bb
+ if it is ENTRY block, move them into single succ of ENTRY in that case.
+
2018-03-21 Richard Sandiford <richard.sandiford@linaro.org>
PR tree-optimization/84811
+2018-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/84960
+ * gcc.c-torture/compile/pr84960.c: New test.
+
2018-03-21 Richard Sandiford <richard.sandiford@linaro.org>
PR tree-optimization/84811
--- /dev/null
+/* 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;
+}
}
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);