A debug insn after the final jump of a basic block may cause the
expander to emit a dummy move where the non-debug compile won't
because it finds the jump insn at the end of the insn stream.

Fix the condition so that, instead of requiring the jump as the last
insn, it also matches a jump followed by debug insns.

This fixes the compilation of libgcc/libgcov-profiler.c with
-fcompare-debug on i686-linux-gnu.

Regstrapped on x86_64-linux-gnu and i686-linux-gnu.  Ok to install?

for  gcc/ChangeLog

        * cfgexpand.c (expand_gimple_basic_block): Disregard debug
        insns after final jump in test to emit dummy move.
---
 gcc/cfgexpand.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 97dc648..76bb614 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -5767,7 +5767,9 @@ expand_gimple_basic_block (basic_block bb, bool 
disable_tail_calls)
   if (single_succ_p (bb)
       && (single_succ_edge (bb)->flags & EDGE_FALLTHRU)
       && (last = get_last_insn ())
-      && JUMP_P (last))
+      && (JUMP_P (last)
+         || (DEBUG_INSN_P (last)
+             && JUMP_P (prev_nondebug_insn (last)))))
     {
       rtx dummy = gen_reg_rtx (SImode);
       emit_insn_after_noloc (gen_move_insn (dummy, dummy), last, NULL);


-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer

Reply via email to