diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-05 18:43:47 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-05 18:43:47 +0000 |
commit | 763bc20ec4322e61ff57b50120d60bd8def3775b (patch) | |
tree | c3acd1cdb9dab61bca0da69e4f310b91701d9016 /gcc/function.c | |
parent | a240ec3ec76279501c7f2d1699a1d3232c06a088 (diff) | |
download | gcc-763bc20ec4322e61ff57b50120d60bd8def3775b.tar.gz |
* function.c (assign_parm_setup_reg): Properly rename variables in
FUNCTION_ARG_CALLEE_COPIES section.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84128 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/gcc/function.c b/gcc/function.c index 71003c2d61b..efeb9f6b24a 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2860,40 +2860,41 @@ assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm, /* ??? Later add code to handle the case that if the argument isn't modified, don't do the copy. */ - else if (data->passed_pointer - && FUNCTION_ARG_CALLEE_COPIES (all->args_so_far, - TYPE_MODE (TREE_TYPE (passed_type)), - TREE_TYPE (passed_type), - data->named_arg) - && ! TREE_ADDRESSABLE (TREE_TYPE (passed_type))) + else if (data->passed_pointer) { - rtx copy; - tree type = TREE_TYPE (passed_type); + tree type = TREE_TYPE (data->passed_type); + + if (FUNCTION_ARG_CALLEE_COPIES (all->args_so_far, TYPE_MODE (type), + type, data->named_arg) + && !TREE_ADDRESSABLE (type)) + { + rtx copy; - /* This sequence may involve a library call perhaps clobbering - registers that haven't been copied to pseudos yet. */ + /* This sequence may involve a library call perhaps clobbering + registers that haven't been copied to pseudos yet. */ - push_to_sequence (all->conversion_insns); + push_to_sequence (all->conversion_insns); - if (!COMPLETE_TYPE_P (type) - || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) - { - /* This is a variable sized object. */ - copy = allocate_dynamic_stack_space (expr_size (parm), NULL_RTX, - TYPE_ALIGN (type)); - copy = gen_rtx_MEM (BLKmode, copy); - } - else - copy = assign_stack_temp (TYPE_MODE (type), - int_size_in_bytes (type), 1); - set_mem_attributes (copy, parm, 1); + if (!COMPLETE_TYPE_P (type) + || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) + { + /* This is a variable sized object. */ + copy = allocate_dynamic_stack_space (expr_size (parm), NULL_RTX, + TYPE_ALIGN (type)); + copy = gen_rtx_MEM (BLKmode, copy); + } + else + copy = assign_stack_temp (TYPE_MODE (type), + int_size_in_bytes (type), 1); + set_mem_attributes (copy, parm, 1); - store_expr (parm, copy, 0); - emit_move_insn (parmreg, XEXP (copy, 0)); - all->conversion_insns = get_insns (); - end_sequence (); + store_expr (parm, copy, 0); + emit_move_insn (parmreg, XEXP (copy, 0)); + all->conversion_insns = get_insns (); + end_sequence (); - did_conversion = true; + did_conversion = true; + } } #endif /* FUNCTION_ARG_CALLEE_COPIES */ |