diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-07-01 16:48:30 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-07-01 16:48:30 +0000 |
commit | 23bae97dbde2902ddefab4ab941447bb52864880 (patch) | |
tree | b1f5ad0bb79ebcafb0c419c0d6fa306209e0311f /gcc/rtl.c | |
parent | c219aeb7dea32513053b905ae584f19cc0813852 (diff) | |
download | gcc-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.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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 |