aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtl.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-07-01 16:48:30 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-07-01 16:48:30 +0000
commit23bae97dbde2902ddefab4ab941447bb52864880 (patch)
treeb1f5ad0bb79ebcafb0c419c0d6fa306209e0311f /gcc/rtl.c
parentc219aeb7dea32513053b905ae584f19cc0813852 (diff)
downloadgcc-23bae97dbde2902ddefab4ab941447bb52864880.zip
gcc-23bae97dbde2902ddefab4ab941447bb52864880.tar.gz
gcc-23bae97dbde2902ddefab4ab941447bb52864880.tar.bz2
re PR middle-end/66685 (conftest.c:16:1: internal compiler error: in as_a, at is-a.h:192)
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
Diffstat (limited to 'gcc/rtl.c')
-rw-r--r--gcc/rtl.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/rtl.c b/gcc/rtl.c
index 2f32c64..dccf298 100644
--- 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