As discussed in the PR, tailcall settings have to be cleared by
the inliner.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk
and 4.9 branch.

Richard.

2014-05-13  Richard Biener  <rguent...@suse.de>

        PR ipa/60973
        * tree-inline.c (remap_gimple_stmt): Clear tail call flag,
        it needs revisiting whether the call still may be tail-called.

Index: gcc/tree-inline.c
===================================================================
--- gcc/tree-inline.c   (revision 210263)
+++ gcc/tree-inline.c   (working copy)
@@ -1483,6 +1487,11 @@ remap_gimple_stmt (gimple stmt, copy_bod
       /* Create a new deep copy of the statement.  */
       copy = gimple_copy (stmt);
 
+      /* Clear flags that need revisiting.  */
+      if (is_gimple_call (copy)
+         && gimple_call_tail_p (copy))
+       gimple_call_set_tail (copy, false);
+
       /* Remap the region numbers for __builtin_eh_{pointer,filter},
         RESX and EH_DISPATCH.  */
       if (id->eh_map)

Reply via email to