diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2016-06-22 13:13:22 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2016-06-22 13:13:22 +0000 |
commit | 951d8c8a23f37136cd377f8069ddeb5be8a67183 (patch) | |
tree | 51a5686c1558c4e5b1825085f9a18364c4ade0b0 /gcc/function.c | |
parent | b60fc3bdf81ecc19693a5e8bab1ab079fa8f085d (diff) | |
download | gcc-951d8c8a23f37136cd377f8069ddeb5be8a67183.zip gcc-951d8c8a23f37136cd377f8069ddeb5be8a67183.tar.gz gcc-951d8c8a23f37136cd377f8069ddeb5be8a67183.tar.bz2 |
* function.c (assign_parm_setup_reg): Prevent sharing in another case.
From-SVN: r237703
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/function.c b/gcc/function.c index c15d47d..abee364 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -3314,6 +3314,8 @@ assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm, set_mem_attributes (parmreg, parm, 1); } + /* We need to preserve an address based on VIRTUAL_STACK_VARS_REGNUM for + the debug info in case it is not legitimate. */ if (GET_MODE (parmreg) != GET_MODE (rtl)) { rtx tempreg = gen_reg_rtx (GET_MODE (rtl)); @@ -3323,7 +3325,8 @@ assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm, all->last_conversion_insn); emit_move_insn (tempreg, rtl); tempreg = convert_to_mode (GET_MODE (parmreg), tempreg, unsigned_p); - emit_move_insn (parmreg, tempreg); + emit_move_insn (MEM_P (parmreg) ? copy_rtx (parmreg) : parmreg, + tempreg); all->first_conversion_insn = get_insns (); all->last_conversion_insn = get_last_insn (); end_sequence (); @@ -3331,7 +3334,7 @@ assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm, did_conversion = true; } else - emit_move_insn (parmreg, rtl); + emit_move_insn (MEM_P (parmreg) ? copy_rtx (parmreg) : parmreg, rtl); rtl = parmreg; |