Commit 6a48df45 by Olivier Hainque Committed by Richard Kenner

calls.c (expand_call): Prevent sibcall optimization for calls to nested subprograms.

	* calls.c (expand_call): Prevent sibcall optimization for calls to
	nested subprograms.

From-SVN: r65904
parent 26b84487
2003-04-21 Olivier Hainque <hainque@act-europe.fr>
* calls.c (expand_call): Prevent sibcall optimization for calls to
nested subprograms.
2003-04-21 Joel Brobecker <brobecker@gnat.com> 2003-04-21 Joel Brobecker <brobecker@gnat.com>
* dwarf2out.c (is_ada, is_ada_subrange_type): New functions. * dwarf2out.c (is_ada, is_ada_subrange_type): New functions.
......
...@@ -2515,6 +2515,10 @@ expand_call (exp, target, ignore) ...@@ -2515,6 +2515,10 @@ expand_call (exp, target, ignore)
optimized. */ optimized. */
|| (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN)) || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN))
|| TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr))) || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
/* If the called function is nested in the current one, it might access
some of the caller's arguments, but could clobber them beforehand if
the argument areas are shared. */
|| (fndecl && decl_function_context (fndecl) == current_function_decl)
/* If this function requires more stack slots than the current /* If this function requires more stack slots than the current
function, we cannot change it into a sibling call. */ function, we cannot change it into a sibling call. */
|| args_size.constant > current_function_args_size || args_size.constant > current_function_args_size
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment