diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 877b1e56a90dc1c8c80069893a27714d801b3794..d70c60fe80dbb4644f435541fe5b96a9de2d00dd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -12,6 +12,10 @@ Mon Mar  8 16:04:44 1999  Jim Wilson  <wilson@cygnus.com>
 
 Mon Mar  8 15:27:42 1999  Jeffrey A Law  (law@cygnus.com)
 
+	* calls.c (initialize_argument_info): Accept a pointer to 
+	CUMULATIVE_ARGS.
+	(expand_call): Pass the address of CUMULATIVE_ARGS.
+
 	* rs6000/xm-sysv4.h (HOST_BITS_PER_LONGLONG): Remove #if 0.
 
 	* mn10300.h (CASE_DROPS_THROUGH): Delete.
diff --git a/gcc/calls.c b/gcc/calls.c
index 86a87ff4f2da55e3c700fcd55e6468e8d2d47bc0..8ed310d31b6d35e78c3aee3febacd730177e4d15 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -149,7 +149,7 @@ static void initialize_argument_information	PROTO ((int,
 							struct arg_data *,
 							struct args_size *,
 							int, tree, tree,
-							CUMULATIVE_ARGS,
+							CUMULATIVE_ARGS *,
 							int, rtx *, int *,
 							int *, int *));
 
@@ -869,7 +869,7 @@ initialize_argument_information (num_actuals, args, args_size, n_named_args,
      int n_named_args;
      tree actparms;
      tree fndecl;
-     CUMULATIVE_ARGS args_so_far;
+     CUMULATIVE_ARGS *args_so_far;
      int reg_parm_stack_space;
      rtx *old_stack_level;
      int *old_pending_adj;
@@ -938,7 +938,7 @@ initialize_argument_information (num_actuals, args, args_size, n_named_args,
 	   && contains_placeholder_p (TYPE_SIZE (type)))
 	  || TREE_ADDRESSABLE (type)
 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
-	  || FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, TYPE_MODE (type),
+	  || FUNCTION_ARG_PASS_BY_REFERENCE (*args_so_far, TYPE_MODE (type),
 					     type, argpos < n_named_args)
 #endif
 	  )
@@ -947,7 +947,7 @@ initialize_argument_information (num_actuals, args, args_size, n_named_args,
              references instead of making a copy.  */
 	  if (current_function_is_thunk
 #ifdef FUNCTION_ARG_CALLEE_COPIES
-	      || (FUNCTION_ARG_CALLEE_COPIES (args_so_far, TYPE_MODE (type),
+	      || (FUNCTION_ARG_CALLEE_COPIES (*args_so_far, TYPE_MODE (type),
 					     type, argpos < n_named_args)
 		  /* If it's in a register, we must make a copy of it too.  */
 		  /* ??? Is this a sufficient test?  Is there a better one? */
@@ -1034,12 +1034,12 @@ initialize_argument_information (num_actuals, args, args_size, n_named_args,
 
       args[i].unsignedp = unsignedp;
       args[i].mode = mode;
-      args[i].reg = FUNCTION_ARG (args_so_far, mode, type,
+      args[i].reg = FUNCTION_ARG (*args_so_far, mode, type,
 				  argpos < n_named_args);
 #ifdef FUNCTION_ARG_PARTIAL_NREGS
       if (args[i].reg)
 	args[i].partial
-	  = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, type,
+	  = FUNCTION_ARG_PARTIAL_NREGS (*args_so_far, mode, type,
 					argpos < n_named_args);
 #endif
 
@@ -1113,7 +1113,7 @@ initialize_argument_information (num_actuals, args, args_size, n_named_args,
       /* Increment ARGS_SO_FAR, which has info about which arg-registers
 	 have been used, etc.  */
 
-      FUNCTION_ARG_ADVANCE (args_so_far, TYPE_MODE (type), type,
+      FUNCTION_ARG_ADVANCE (*args_so_far, TYPE_MODE (type), type,
 			    argpos < n_named_args);
     }
 }
@@ -1761,7 +1761,7 @@ expand_call (exp, target, ignore)
   /* Build up entries inthe ARGS array, compute the size of the arguments
      into ARGS_SIZE, etc.  */
   initialize_argument_information (num_actuals, args, &args_size, n_named_args,
-				   actparms, fndecl, args_so_far,
+				   actparms, fndecl, &args_so_far,
 				   reg_parm_stack_space, &old_stack_level,
 				   &old_pending_adj, &must_preallocate,
 				   &is_const);