https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88347

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-12-12
                 CC|                            |segher at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Confirmed.

We here have an unconditional branch that is not followed by a barrier:
first there is a label and a jump table, after *that* is the barrier.

Is this correct RTL?  If so,

===
diff --git a/gcc/sched-ebb.c b/gcc/sched-ebb.c
index 49ae286..566cb24 100644
--- a/gcc/sched-ebb.c
+++ b/gcc/sched-ebb.c
@@ -172,7 +172,11 @@ begin_move_insn (rtx_insn *insn, rtx_insn *last)
        if (e)
          gcc_checking_assert (NOTE_P (x) || LABEL_P (x));
        else
-         gcc_checking_assert (BARRIER_P (x));
+         {
+           if (LABEL_P (x) && JUMP_TABLE_DATA_P (NEXT_INSN (x)))
+             x = NEXT_INSN (NEXT_INSN (x));
+           gcc_checking_assert (BARRIER_P (x));
+         }
       }

       if (e)
===

fixes it.

Reply via email to