diff options
author | Richard Henderson <rth@redhat.com> | 2004-12-01 21:24:11 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-12-01 21:24:11 -0800 |
commit | 0becc98698a748a8b28af730ca55986fa02b9811 (patch) | |
tree | cb213fe6556612dd6e1bfda35aac8ccf3abaff8e /gcc/expr.c | |
parent | ca3a791a1692d3f0890b647f2b860cfa5e7ea678 (diff) | |
download | gcc-0becc98698a748a8b28af730ca55986fa02b9811.zip gcc-0becc98698a748a8b28af730ca55986fa02b9811.tar.gz gcc-0becc98698a748a8b28af730ca55986fa02b9811.tar.bz2 |
expr.c (expand_assignment): Handle CONCAT both as a final destination and as a middle point.
* expr.c (expand_assignment): Handle CONCAT both as a final
destination and as a middle point.
From-SVN: r91614
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -3757,8 +3757,16 @@ expand_assignment (tree to, tree from) /* Handle expand_expr of a complex value returning a CONCAT. */ if (GET_CODE (to_rtx) == CONCAT) { - gcc_assert (bitpos == 0 || bitpos == GET_MODE_BITSIZE (mode1)); - result = store_expr (from, XEXP (to_rtx, bitpos != 0), false); + if (TREE_CODE (TREE_TYPE (from)) == COMPLEX_TYPE) + { + gcc_assert (bitpos == 0); + result = store_expr (from, to_rtx, false); + } + else + { + gcc_assert (bitpos == 0 || bitpos == GET_MODE_BITSIZE (mode1)); + result = store_expr (from, XEXP (to_rtx, bitpos != 0), false); + } } else { |