diff options
author | Jason Merrill <jason@casey.cygnus.com> | 2000-03-13 22:54:03 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2000-03-13 17:54:03 -0500 |
commit | c3b247b44564c667972e0ed6f7673530378813e5 (patch) | |
tree | fdc1be5ec41c1b886780e4d8de0c601ad6838917 /gcc/expr.c | |
parent | 45b966db65e4ab054d31f01f65b7a98023dbcb54 (diff) | |
download | gcc-c3b247b44564c667972e0ed6f7673530378813e5.zip gcc-c3b247b44564c667972e0ed6f7673530378813e5.tar.gz gcc-c3b247b44564c667972e0ed6f7673530378813e5.tar.bz2 |
function.c (put_var_into_stack): Use type_for_mode to calculate part_type.
* 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.
From-SVN: r32514
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -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. */ |