re PR ipa/60973 (Invalid propagation of a tail call in devirt pass)
authorRichard Biener <rguenther@suse.de>
Tue, 13 May 2014 11:04:44 +0000 (11:04 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 13 May 2014 11:04:44 +0000 (11:04 +0000)
2014-05-13  Richard Biener  <rguenther@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.

From-SVN: r210364

gcc/ChangeLog
gcc/tree-inline.c

index 210eeb4cc12525006178d1edb1de54a5493af411..663acf16cbfcbfa33a5119afd56d0d068de2e528 100644 (file)
@@ -1,3 +1,9 @@
+2014-05-13  Richard Biener  <rguenther@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.
+
 2014-05-13  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * rtl.def (SYMBOL_REF): Remove middle "0" field.
index 987e81506b7c969c8a821e4c28f088499f0a10ec..9207e9f7296c96715ae94070b0a79adaf5bef694 100644 (file)
@@ -1483,6 +1483,11 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id)
       /* 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)