diff options
author | Richard Biener <rguenther@suse.de> | 2014-05-13 11:04:44 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-05-13 11:04:44 +0000 |
commit | 6b77934ee0a2d22031db48fe6ce0f42154ac21dc (patch) | |
tree | 1cc9eaf6c139a92c82179d076e0eed05e58acadc /gcc/tree-inline.c | |
parent | da3cd1136113a13ae25b7deaf4bc02e250af054c (diff) | |
download | gcc-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.c | 5 |
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) |