calls.c (store_one_arg): Mark any slots used for the argument as in-use immediately...
authorJeffrey A Law <law@cygnus.com>
Tue, 16 Feb 1999 20:42:28 +0000 (20:42 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 16 Feb 1999 20:42:28 +0000 (13:42 -0700)
        * calls.c (store_one_arg): Mark any slots used for the argument
        as in-use immediately after we're done saving any slots which
        will be overwritten by this argument.

From-SVN: r25256

gcc/ChangeLog
gcc/calls.c

index a1b00de..687702a 100644 (file)
@@ -1,3 +1,9 @@
+Tue Feb 16 21:29:38 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * calls.c (store_one_arg): Mark any slots used for the argument
+       as in-use immediately after we're done saving any slots which
+       will be overwritten by this argument. 
+
 Tue Feb 16 21:02:07 1999  Anton Hartl <toni@devsoft.com>
 
        * rs6000.md (call_value): Fix typo.
index b5bb745..b8f825c 100644 (file)
@@ -3558,6 +3558,14 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size,
            }
        }
     }
+
+  /* Now that we have saved any slots that will be overwritten by this
+     store, mark all slots this store will use.  We must do this before
+     we actually expand the argument since the expansion itself may
+     trigger library calls which might need to use the same stack slot.  */
+  if (argblock && ! variable_size && arg->stack)
+    for (i = lower_bound; i < upper_bound; i++)
+      stack_usage_map[i] = 1;
 #endif
 
   /* If this isn't going to be placed on both the stack and in registers,
@@ -3733,11 +3741,4 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size,
   preserve_temp_slots (NULL_RTX);
   free_temp_slots ();
   pop_temp_slots ();
-
-#ifdef ACCUMULATE_OUTGOING_ARGS
-  /* Now mark the segment we just used.  */
-  if (argblock && ! variable_size && arg->stack)
-    for (i = lower_bound; i < upper_bound; i++)
-      stack_usage_map[i] = 1;
-#endif
 }