aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-02-16 20:42:28 +0000
committerJeff Law <law@gcc.gnu.org>1999-02-16 13:42:28 -0700
commitb564df06785ebcfa7a7b223fdd8ee8cf619d6c5f (patch)
treedfacb7b9b2143b5bc6cc6b075dce7f4a9ba4711b /gcc
parent6756293cc3ccfb7d4af73f0e73e57889325f2ba6 (diff)
downloadgcc-b564df06785ebcfa7a7b223fdd8ee8cf619d6c5f.zip
gcc-b564df06785ebcfa7a7b223fdd8ee8cf619d6c5f.tar.gz
gcc-b564df06785ebcfa7a7b223fdd8ee8cf619d6c5f.tar.bz2
calls.c (store_one_arg): Mark any slots used for the argument as in-use immediately after we're done...
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/calls.c15
2 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a1b00de..687702a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/calls.c b/gcc/calls.c
index b5bb745..b8f825c 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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
}