re PR rtl-optimization/50496 (ICE in redirect_jump, at jump.c:1497)
authorChung-Lin Tang <cltang@codesourcery.com>
Wed, 23 Nov 2011 13:22:30 +0000 (13:22 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Wed, 23 Nov 2011 13:22:30 +0000 (13:22 +0000)
2011-11-23  Chung-Lin Tang  <cltang@codesourcery.com>

PR rtl-optimization/50496
* jump.c (redirect_jump): Assert fail on nlabel == NULL_RTX
only after epilogue is created. Add comments.

From-SVN: r181664

gcc/ChangeLog
gcc/jump.c

index abd83806d004c3e30d22b3817d775c9389a30d54..4e574a030860ed5f310b3233d10bb0d09037e107 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-23  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR rtl-optimization/50496
+       * jump.c (redirect_jump): Assert fail on nlabel == NULL_RTX
+       only after epilogue is created. Add comments.
+
 2011-11-22  Richard Henderson  <rth@redhat.com>
 
        * config/ia64/ia64.c (ia64_expand_atomic_op): Add model parameter.
index f852f827729d48381cba6f2ca4bec85d5a0cac55..52cbbca43dbdfa672c53d231049656bffba329c9 100644 (file)
@@ -1495,7 +1495,18 @@ redirect_jump (rtx jump, rtx nlabel, int delete_unused)
 {
   rtx olabel = JUMP_LABEL (jump);
 
-  gcc_assert (nlabel != NULL_RTX);
+  if (!nlabel)
+    {
+      /* If there is no label, we are asked to redirect to the EXIT block.
+        When before the epilogue is emitted, return/simple_return cannot be
+        created so we return 0 immediately.  After the epilogue is emitted,
+        we always expect a label, either a non-null label, or a
+        return/simple_return RTX.  */
+
+      if (!epilogue_completed)
+       return 0;
+      gcc_unreachable ();
+    }
 
   if (nlabel == olabel)
     return 1;