OSDN Git Service

PR target/45250
[pf3gnuchains/gcc-fork.git] / gcc / cfglayout.c
index 7ba289f..e93e407 100644 (file)
@@ -39,6 +39,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-pass.h"
 #include "df.h"
 #include "vecprim.h"
+#include "emit-rtl.h"
 
 /* Holds the interesting trailing notes for the function.  */
 rtx cfg_layout_function_footer;
@@ -793,7 +794,8 @@ fixup_reorder_chain (void)
                 to prevent rtl_verify_flow_info from complaining.  */
              if (!e_fall)
                {
-                 gcc_assert (!onlyjump_p (bb_end_insn));
+                 gcc_assert (!onlyjump_p (bb_end_insn)
+                             || returnjump_p (bb_end_insn));
                  bb->il.rtl->footer = emit_barrier_after (bb_end_insn);
                  continue;
                }
@@ -953,7 +955,7 @@ fixup_reorder_chain (void)
              insn = BB_END (e->src);
              end = PREV_INSN (BB_HEAD (e->src));
              while (insn != end
-                    && (!INSN_P (insn) || INSN_LOCATOR (insn) == 0))
+                    && (!NONDEBUG_INSN_P (insn) || INSN_LOCATOR (insn) == 0))
                insn = PREV_INSN (insn);
              if (insn != end
                  && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus))
@@ -968,7 +970,7 @@ fixup_reorder_chain (void)
                {
                  insn = BB_HEAD (e->dest);
                  end = NEXT_INSN (BB_END (e->dest));
-                 while (insn != end && !INSN_P (insn))
+                 while (insn != end && !NONDEBUG_INSN_P (insn))
                    insn = NEXT_INSN (insn);
                  if (insn != end && INSN_LOCATOR (insn)
                      && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus))
@@ -989,7 +991,7 @@ fixup_reorder_chain (void)
    2. Count insns in chain, going both directions, and check if equal.
    3. Check that get_last_insn () returns the actual end of chain.  */
 
-void
+DEBUG_FUNCTION void
 verify_insn_chain (void)
 {
   rtx x, prevx, nextx;