summaryrefslogtreecommitdiffstats
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-13 22:54:03 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-13 22:54:03 +0000
commitefd3939cc33f07e04eee216a35b4420cc81b32fd (patch)
treefdc1be5ec41c1b886780e4d8de0c601ad6838917 /gcc/expr.c
parent0578f1031d35f9fef998936604c8d1176c0bfc5a (diff)
downloadppe42-gcc-efd3939cc33f07e04eee216a35b4420cc81b32fd.tar.gz
ppe42-gcc-efd3939cc33f07e04eee216a35b4420cc81b32fd.zip
* function.c (put_var_into_stack): Use type_for_mode to calculate
part_type. Use MEM_SET_IN_STRUCT_P. * expr.c (store_field): Handle CONCAT. (store_constructor): Use fields_length. * tree.c (fields_length): New fn. * tree.h: Declare it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32514 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 671255ef555..5ba5ee610cf 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4151,7 +4151,7 @@ store_constructor (exp, target, align, cleared, size)
clear the whole structure first. */
else if (size > 0
&& ((list_length (CONSTRUCTOR_ELTS (exp))
- != list_length (TYPE_FIELDS (type)))
+ != fields_length (type))
|| mostly_zeros_p (exp)))
{
if (! cleared)
@@ -4758,6 +4758,15 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode,
return blk_object;
}
+ if (GET_CODE (target) == CONCAT)
+ {
+ /* We're storing into a struct containing a single __complex. */
+
+ if (bitpos != 0)
+ abort ();
+ return store_expr (exp, target, 0);
+ }
+
/* If the structure is in a register or if the component
is a bit field, we cannot use addressing to access it.
Use bit-field techniques or SUBREG to store in it. */
OpenPOWER on IntegriCloud