diff options
author | Bernd Schmidt <bernd.schmidt@analog.com> | 2005-01-26 11:22:33 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2005-01-26 11:22:33 +0000 |
commit | 4018444567e39b5e06f07948de9031476dbb7f1d (patch) | |
tree | 21d64f437d534ab3b0ef0303cc4a7aefd060a40a /gcc/function.c | |
parent | 02a65d230fc24a23a5c74483bc6de7dcd24b4e80 (diff) | |
download | gcc-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.c | 24 |
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 |