aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorJason Merrill <jason@casey.cygnus.com>2000-03-13 22:54:03 +0000
committerJason Merrill <jason@gcc.gnu.org>2000-03-13 17:54:03 -0500
commitc3b247b44564c667972e0ed6f7673530378813e5 (patch)
treefdc1be5ec41c1b886780e4d8de0c601ad6838917 /gcc/function.c
parent45b966db65e4ab054d31f01f65b7a98023dbcb54 (diff)
downloadgcc-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/function.c')
-rw-r--r--gcc/function.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 1ffb821..318d16b 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -1383,7 +1383,7 @@ put_var_into_stack (decl)
/* A CONCAT contains two pseudos; put them both in the stack.
We do it so they end up consecutive. */
enum machine_mode part_mode = GET_MODE (XEXP (reg, 0));
- tree part_type = TREE_TYPE (TREE_TYPE (decl));
+ tree part_type = type_for_mode (part_mode, 0);
#ifdef FRAME_GROWS_DOWNWARD
/* Since part 0 should have a lower address, do it second. */
put_reg_into_stack (function, XEXP (reg, 1), part_type, part_mode,
@@ -1409,6 +1409,7 @@ put_var_into_stack (decl)
PUT_CODE (reg, MEM);
MEM_VOLATILE_P (reg) = MEM_VOLATILE_P (XEXP (reg, 0));
MEM_ALIAS_SET (reg) = get_alias_set (decl);
+ MEM_SET_IN_STRUCT_P (reg, AGGREGATE_TYPE_P (TREE_TYPE (decl)));
/* The two parts are in memory order already.
Use the lower parts address as ours. */