diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 917f98e671f..48f04066fab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-12-08 Richard Sandiford + + * calls.c (expand_call): Don't try using tail or recursive calls + after the function body has been expanded. + 2003-12-08 Jan Hubicka * i386.md (cmpstr expander): Obey TARGET_INLINE_ALL_STRINGOPS diff --git a/gcc/calls.c b/gcc/calls.c index 79d9b9c4452..50466c2f8f6 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2485,11 +2485,15 @@ expand_call (tree exp, rtx target, int ignore) finished with regular parsing. Which means that some of the machinery we use to generate tail-calls is no longer in place. This is most often true of sjlj-exceptions, which we couldn't - tail-call to anyway. */ + tail-call to anyway. + If current_nesting_level () == 0, we're being called after + the function body has been expanded. This can happen when + setting up trampolines in expand_function_end. */ if (currently_expanding_call++ != 0 || !flag_optimize_sibling_calls || !rtx_equal_function_value_matters + || current_nesting_level () == 0 || any_pending_cleanups () || args_size.var) try_tail_call = try_tail_recursion = 0;