diff --git a/gcc/function.c b/gcc/function.c index cc9fa506162..596916260f3 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -3546,21 +3546,14 @@ assign_parms (fndecl, second_time) if (TYPE_SIZE (type) == 0 || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) - { - /* This is a variable sized object. */ - /* ??? Can we use expr_size here? */ - rtx size_rtx = expand_expr (size_in_bytes (type), NULL_RTX, - TYPE_MODE (sizetype), 0); - - copy = gen_rtx (MEM, BLKmode, - allocate_dynamic_stack_space (size_rtx, NULL_RTX, - TYPE_ALIGN (type))); - } + /* This is a variable sized object. */ + copy = gen_rtx (MEM, BLKmode, + allocate_dynamic_stack_space + (expand_size (parm), NULL_RTX, + TYPE_ALIGN (type))); else - { - int size = int_size_in_bytes (type); - copy = assign_stack_temp (TYPE_MODE (type), size, 1); - } + copy = assign_stack_temp (TYPE_MODE (type), + int_size_in_bytes (type), 1); store_expr (parm, copy, 0); emit_move_insn (parmreg, XEXP (copy, 0));