2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-03-20 17:40:46 +08:00

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
This commit is contained in:
Bernd Schmidt 2005-01-26 11:22:33 +00:00 committed by Bernd Schmidt
parent 02a65d230f
commit 4018444567
2 changed files with 18 additions and 12 deletions

@ -1,3 +1,9 @@
2005-01-26 Bernd Schmidt <bernd.schmidt@analog.com>
* 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.
2005-01-26 Alexandre Oliva <aoliva@redhat.com>
* Makefile.in (../$(build_subdir)/fixincludes/fixincl): Add dummy

@ -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