sibcall.c (optimize_sibling_and_tail_recursive_call): Suppress optimization if current_function_calls_setjmp.

* sibcall.c (optimize_sibling_and_tail_recursive_call): Suppress
        optimization if current_function_calls_setjmp.

From-SVN: r42880
This commit is contained in:
Richard Henderson 2001-06-04 13:20:35 -07:00 committed by Richard Henderson
parent 2846f342f9
commit 1696785eab
2 changed files with 10 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2001-06-04 Richard Henderson <rth@redhat.com>
* sibcall.c (optimize_sibling_and_tail_recursive_call): Suppress
optimization if current_function_calls_setjmp.
2001-06-04 Joseph S. Myers <jsm28@cam.ac.uk>
* doc/c-tree.texi: Fix documentation of TREE_STRING_LENGTH for

View File

@ -617,11 +617,15 @@ optimize_sibling_and_tail_recursive_calls ()
/* See if there are any reasons we can't perform either sibling or
tail call optimizations. We must be careful with stack slots
which are live at potential optimization sites. ?!? The first
which are live at potential optimization sites. ??? The first
test is overly conservative and should be replaced. */
if (frame_offset
/* Can't take address of local var if used by recursive call. */
|| current_function_uses_addressof
/* Any function that calls setjmp might have longjmp called from
any called function. ??? We really should represent this
properly in the CFG so that this needn't be special cased. */
|| current_function_calls_setjmp
/* Can't if more than one successor or single successor is not
exit block. These two tests prevent tail call optimization
in the presense of active exception handlers. */