aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-05-13 11:04:44 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-05-13 11:04:44 +0000
commit6b77934ee0a2d22031db48fe6ce0f42154ac21dc (patch)
tree1cc9eaf6c139a92c82179d076e0eed05e58acadc /gcc/tree-inline.c
parentda3cd1136113a13ae25b7deaf4bc02e250af054c (diff)
downloadgcc-6b77934ee0a2d22031db48fe6ce0f42154ac21dc.zip
gcc-6b77934ee0a2d22031db48fe6ce0f42154ac21dc.tar.gz
gcc-6b77934ee0a2d22031db48fe6ce0f42154ac21dc.tar.bz2
re PR ipa/60973 (Invalid propagation of a tail call in devirt pass)
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
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 987e815..9207e9f 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -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)