diff options
author | Jeffrey A Law <law@cygnus.com> | 1999-02-16 20:42:28 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-02-16 13:42:28 -0700 |
commit | b564df06785ebcfa7a7b223fdd8ee8cf619d6c5f (patch) | |
tree | dfacb7b9b2143b5bc6cc6b075dce7f4a9ba4711b /gcc | |
parent | 6756293cc3ccfb7d4af73f0e73e57889325f2ba6 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/calls.c | 15 |
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 } |