diff options
| author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-03-13 22:54:03 +0000 |
|---|---|---|
| committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-03-13 22:54:03 +0000 |
| commit | efd3939cc33f07e04eee216a35b4420cc81b32fd (patch) | |
| tree | fdc1be5ec41c1b886780e4d8de0c601ad6838917 /gcc/expr.c | |
| parent | 0578f1031d35f9fef998936604c8d1176c0bfc5a (diff) | |
| download | ppe42-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.c | 11 |
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. */ |

