calls.c (expand_call): Don't try using tail or recursive calls after the function...
authorRichard Sandiford <rsandifo@redhat.com>
Mon, 8 Dec 2003 10:33:46 +0000 (10:33 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 8 Dec 2003 10:33:46 +0000 (10:33 +0000)
* calls.c (expand_call): Don't try using tail or recursive calls
after the function body has been expanded.

From-SVN: r74415

gcc/ChangeLog
gcc/calls.c

index 917f98e671f7e3b773d04a2180fd287baa086a5e..48f04066fabf0961d3c4eb00fc4762f6d26004ef 100644 (file)
@@ -1,3 +1,8 @@
+2003-12-08  Richard Sandiford  <rsandifo@redhat.com>
+
+       * calls.c (expand_call): Don't try using tail or recursive calls
+       after the function body has been expanded.
+
 2003-12-08  Jan Hubicka  <jh@suse.cz>
 
        * i386.md (cmpstr expander): Obey TARGET_INLINE_ALL_STRINGOPS
index 79d9b9c445253e862f2e362b58d02222af13efce..50466c2f8f6b6fef56be415256a6e64b260db43c 100644 (file)
@@ -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;