diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-01-14 20:57:34 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-01-14 20:57:34 +0100 |
commit | cd65ae907103641c8581f1dc9b0b1803979637cb (patch) | |
tree | 44b2a76497314422635589c03b12410b25351368 /gcc/lra-eliminations.c | |
parent | 19643948dbeafd5444ba3059c1eef813ecd6e4ed (diff) | |
download | gcc-cd65ae907103641c8581f1dc9b0b1803979637cb.zip gcc-cd65ae907103641c8581f1dc9b0b1803979637cb.tar.gz gcc-cd65ae907103641c8581f1dc9b0b1803979637cb.tar.bz2 |
re PR debug/69244 (ICE in plus_constant, at explow.c:87 on i686-linux-gnu)
PR debug/69244
* lra-eliminations.c (move_plus_up): Don't change anything if either
the outer or inner subreg mode is not MODE_INT.
* dwarf2out.c (mem_loc_descriptor): For SUBREG, if outer mode is
integral <= DWARF2_ADDR_SIZE, convert to untyped afterwards.
* gcc.dg/guality/pr69244.c: New test.
From-SVN: r232382
Diffstat (limited to 'gcc/lra-eliminations.c')
-rw-r--r-- | gcc/lra-eliminations.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/lra-eliminations.c b/gcc/lra-eliminations.c index 99d5c6f..1494263 100644 --- a/gcc/lra-eliminations.c +++ b/gcc/lra-eliminations.c @@ -295,7 +295,9 @@ move_plus_up (rtx x) subreg_reg_mode = GET_MODE (subreg_reg); if (GET_CODE (x) == SUBREG && GET_CODE (subreg_reg) == PLUS && GET_MODE_SIZE (x_mode) <= GET_MODE_SIZE (subreg_reg_mode) - && CONSTANT_P (XEXP (subreg_reg, 1))) + && CONSTANT_P (XEXP (subreg_reg, 1)) + && GET_MODE_CLASS (x_mode) == MODE_INT + && GET_MODE_CLASS (subreg_reg_mode) == MODE_INT) { rtx cst = simplify_subreg (x_mode, XEXP (subreg_reg, 1), subreg_reg_mode, subreg_lowpart_offset (x_mode, |