diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e78b4be22a..c322ff3c5c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-22 Iain Sandoe + + * calls.c (load_register_parameters): Move check for zero + sized items so that only the call to + mem_overlaps_already_clobbered_arg_p () is protected. + 2010-07-22 Jan Hubicka * ipa-pure-const.c (varying_state): Break out from ... diff --git a/gcc/calls.c b/gcc/calls.c index 73771092a48..cd0d9c593f3 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1668,15 +1668,16 @@ load_register_parameters (struct arg_data *args, int num_actuals, emit_move_insn (gen_rtx_REG (word_mode, REGNO (reg) + j), args[i].aligned_regs[j]); - else if ((partial == 0 || args[i].pass_on_stack) - && size != 0) + else if (partial == 0 || args[i].pass_on_stack) { rtx mem = validize_mem (args[i].value); - /* Check for overlap with already clobbered argument area. */ + /* Check for overlap with already clobbered argument area, + providing that this has non-zero size. */ if (is_sibcall - && mem_overlaps_already_clobbered_arg_p (XEXP (args[i].value, 0), - size)) + && (size == 0 + || mem_overlaps_already_clobbered_arg_p + (XEXP (args[i].value, 0), size))) *sibcall_failure = 1; /* Handle a BLKmode that needs shifting. */