re PR middle-end/66685 (conftest.c:16:1: internal compiler error: in as_a, at is...
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 1 Jul 2015 16:48:30 +0000 (16:48 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 1 Jul 2015 16:48:30 +0000 (16:48 +0000)
gcc/
PR bootstrap/66685
* rtl.c (classify_insn): Only return JUMP_INSN for parallel returns if
there are no CALLs in the same pattern.

From-SVN: r225263

gcc/ChangeLog
gcc/rtl.c

index 48e91596a76bbbcff5180e10b7baf4bd37470b53..75df9c0dd06353c5029357dbc5808093c1e61ae4 100644 (file)
@@ -1,3 +1,9 @@
+2015-07-01  Richard Sandiford  <richard.sandiford@arm.com>
+
+       PR bootstrap/66685
+       * rtl.c (classify_insn): Only return JUMP_INSN for parallel returns if
+       there are no CALLs in the same pattern.
+
 2015-07-01  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        PR rtl-optimization/61047
index 2f32c649b4d128cd5f18f83d57886d1d277da258..dccf298563b6638b97263f6b292394d0d756c5d2 100644 (file)
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -683,17 +683,20 @@ classify_insn (rtx x)
   if (GET_CODE (x) == PARALLEL)
     {
       int j;
+      bool has_return_p = false;
       for (j = XVECLEN (x, 0) - 1; j >= 0; j--)
        if (GET_CODE (XVECEXP (x, 0, j)) == CALL)
          return CALL_INSN;
        else if (ANY_RETURN_P (XVECEXP (x, 0, j)))
-         return JUMP_INSN;
+         has_return_p = true;
        else if (GET_CODE (XVECEXP (x, 0, j)) == SET
                 && GET_CODE (SET_DEST (XVECEXP (x, 0, j))) == PC)
          return JUMP_INSN;
        else if (GET_CODE (XVECEXP (x, 0, j)) == SET
                 && GET_CODE (SET_SRC (XVECEXP (x, 0, j))) == CALL)
          return CALL_INSN;
+      if (has_return_p)
+       return JUMP_INSN;
     }
 #ifdef GENERATOR_FILE
   if (GET_CODE (x) == MATCH_OPERAND