diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2015-03-16 10:26:28 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2015-03-16 10:26:28 +0000 |
commit | 9e25209f3a29dd1c8ee33c848a6a2b66e4c06d48 (patch) | |
tree | 74360d68ac8e131f8a56766c8bda7af6b7cf6beb /gcc/expr.c | |
parent | 2aab918dacb5a7dc51a4a33db785f2840a093d9d (diff) | |
download | gcc-9e25209f3a29dd1c8ee33c848a6a2b66e4c06d48.zip gcc-9e25209f3a29dd1c8ee33c848a6a2b66e4c06d48.tar.gz gcc-9e25209f3a29dd1c8ee33c848a6a2b66e4c06d48.tar.bz2 |
re PR middle-end/65409 (ICE in store_field)
PR middle-end/65409
* expr.c (store_field): Do not do a direct block copy if the source is
a PARALLEL with BLKmode.
From-SVN: r221453
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -6645,11 +6645,12 @@ store_field (rtx target, HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos, && mode != TYPE_MODE (TREE_TYPE (exp))) temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1); - /* If the modes of TEMP and TARGET are both BLKmode, both - must be in memory and BITPOS must be aligned on a byte - boundary. If so, we simply do a block copy. Likewise - for a BLKmode-like TARGET. */ - if (GET_MODE (temp) == BLKmode + /* If TEMP is not a PARALLEL (see below) and its mode and that of TARGET + are both BLKmode, both must be in memory and BITPOS must be aligned + on a byte boundary. If so, we simply do a block copy. Likewise for + a BLKmode-like TARGET. */ + if (GET_CODE (temp) != PARALLEL + && GET_MODE (temp) == BLKmode && (GET_MODE (target) == BLKmode || (MEM_P (target) && GET_MODE_CLASS (GET_MODE (target)) == MODE_INT |