diff options
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index 78fe7d8..e845652 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1937,7 +1937,7 @@ load_register_parameters (struct arg_data *args, int num_actuals, else if (partial == 0 || args[i].pass_on_stack) { - rtx mem = validize_mem (args[i].value); + rtx mem = validize_mem (copy_rtx (args[i].value)); /* Check for overlap with already clobbered argument area, providing that this has non-zero size. */ @@ -4014,7 +4014,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value, argvec[argnum].locate.size.constant ); - emit_block_move (validize_mem (argvec[argnum].save_area), + emit_block_move (validize_mem + (copy_rtx (argvec[argnum].save_area)), stack_area, GEN_INT (argvec[argnum].locate.size.constant), BLOCK_OP_CALL_PARM); @@ -4289,7 +4290,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value, if (save_mode == BLKmode) emit_block_move (stack_area, - validize_mem (argvec[count].save_area), + validize_mem + (copy_rtx (argvec[count].save_area)), GEN_INT (argvec[count].locate.size.constant), BLOCK_OP_CALL_PARM); else @@ -4433,7 +4435,8 @@ store_one_arg (struct arg_data *arg, rtx argblock, int flags, arg->save_area = assign_temp (TREE_TYPE (arg->tree_value), 1, 1); preserve_temp_slots (arg->save_area); - emit_block_move (validize_mem (arg->save_area), stack_area, + emit_block_move (validize_mem (copy_rtx (arg->save_area)), + stack_area, GEN_INT (arg->locate.size.constant), BLOCK_OP_CALL_PARM); } |