aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-12-01 21:24:11 -0800
committerRichard Henderson <rth@gcc.gnu.org>2004-12-01 21:24:11 -0800
commit0becc98698a748a8b28af730ca55986fa02b9811 (patch)
treecb213fe6556612dd6e1bfda35aac8ccf3abaff8e /gcc/expr.c
parentca3a791a1692d3f0890b647f2b860cfa5e7ea678 (diff)
downloadgcc-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.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 4616f21..f16f82f 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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
{