aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2005-01-26 11:22:33 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2005-01-26 11:22:33 +0000
commit4018444567e39b5e06f07948de9031476dbb7f1d (patch)
tree21d64f437d534ab3b0ef0303cc4a7aefd060a40a /gcc/function.c
parent02a65d230fc24a23a5c74483bc6de7dcd24b4e80 (diff)
downloadgcc-4018444567e39b5e06f07948de9031476dbb7f1d.zip
gcc-4018444567e39b5e06f07948de9031476dbb7f1d.tar.gz
gcc-4018444567e39b5e06f07948de9031476dbb7f1d.tar.bz2
function.c (expand_function_end): If current_function_calls_alloca...
* function.c (expand_function_end): If current_function_calls_alloca, emit stack restore in a place that is reached when the function falls through at the end. From-SVN: r94259
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/gcc/function.c b/gcc/function.c
index f0d2ec1..c4656e5 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -4460,18 +4460,6 @@ expand_function_end (void)
if (flag_exceptions && USING_SJLJ_EXCEPTIONS)
sjlj_emit_function_exit_after (get_last_insn ());
- /* If we had calls to alloca, and this machine needs
- an accurate stack pointer to exit the function,
- insert some code to save and restore the stack pointer. */
- if (! EXIT_IGNORE_STACK
- && current_function_calls_alloca)
- {
- rtx tem = 0;
-
- emit_stack_save (SAVE_FUNCTION, &tem, parm_birth_insn);
- emit_stack_restore (SAVE_FUNCTION, tem, NULL_RTX);
- }
-
/* If scalar return value was computed in a pseudo-reg, or was a named
return value that got dumped to the stack, copy that to the hard
return register. */
@@ -4599,6 +4587,18 @@ expand_function_end (void)
/* Output the label for the naked return from the function. */
emit_label (naked_return_label);
+ /* If we had calls to alloca, and this machine needs
+ an accurate stack pointer to exit the function,
+ insert some code to save and restore the stack pointer. */
+ if (! EXIT_IGNORE_STACK
+ && current_function_calls_alloca)
+ {
+ rtx tem = 0;
+
+ emit_stack_save (SAVE_FUNCTION, &tem, parm_birth_insn);
+ emit_stack_restore (SAVE_FUNCTION, tem, NULL_RTX);
+ }
+
/* ??? This should no longer be necessary since stupid is no longer with
us, but there are some parts of the compiler (eg reload_combine, and
sh mach_dep_reorg) that still try and compute their own lifetime info