From: kenner Date: Mon, 21 Apr 2003 21:08:50 +0000 (+0000) Subject: * calls.c (expand_call): Prevent sibcall optimization for calls to X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=4c4a1039ab8fa4fc34a09fc84c0fe85c6daf7125;p=pf3gnuchains%2Fgcc-fork.git * calls.c (expand_call): Prevent sibcall optimization for calls to nested subprograms. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65904 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b27996f50e1..decc4b14b45 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-04-21 Olivier Hainque + + * calls.c (expand_call): Prevent sibcall optimization for calls to + nested subprograms. + 2003-04-21 Joel Brobecker * dwarf2out.c (is_ada, is_ada_subrange_type): New functions. diff --git a/gcc/calls.c b/gcc/calls.c index 9b49f8719c2..06ed14a00e4 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2515,6 +2515,10 @@ expand_call (exp, target, ignore) optimized. */ || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN)) || 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 function, we cannot change it into a sibling call. */ || args_size.constant > current_function_args_size