Index: gcc/calls.c
===================================================================
--- gcc/calls.c	(revision 162339)
+++ gcc/calls.c	(working copy)
@@ -1668,15 +1668,16 @@ load_register_parameters (struct arg_data  
*args, i
  	      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 finite 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;

