2011-06-09 Chung-Lin Tang LP:748138 gcc/ * cfgrtl.c (try_redirect_by_replacing_jump): Treat EXIT_BLOCK_PTR case separately before call to redirect_jump(). Add assertion. (patch_jump_insn): Same. === modified file 'gcc/cfgrtl.c' --- old/gcc/cfgrtl.c 2011-02-08 10:51:58 +0000 +++ new/gcc/cfgrtl.c 2011-05-12 08:56:07 +0000 @@ -835,11 +835,10 @@ if (dump_file) fprintf (dump_file, "Redirecting jump %i from %i to %i.\n", INSN_UID (insn), e->dest->index, target->index); - if (!redirect_jump (insn, block_label (target), 0)) - { - gcc_assert (target == EXIT_BLOCK_PTR); - return NULL; - } + if (target == EXIT_BLOCK_PTR) + return NULL; + if (! redirect_jump (insn, block_label (target), 0)) + gcc_unreachable (); } /* Cannot do anything for target exit block. */ @@ -1019,11 +1018,10 @@ /* If the substitution doesn't succeed, die. This can happen if the back end emitted unrecognizable instructions or if target is exit block on some arches. */ - if (!redirect_jump (insn, block_label (new_bb), 0)) - { - gcc_assert (new_bb == EXIT_BLOCK_PTR); - return false; - } + if (new_bb == EXIT_BLOCK_PTR) + return false; + if (! redirect_jump (insn, block_label (new_bb), 0)) + gcc_unreachable (); } } return true;