[Bug c++/58477] [4.9 Regression] ice in cgraph_speculative_call_info
hubicka at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Dec 6 15:27:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58477
--- Comment #5 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
I am testing
Index: ../gcc/cgraphclones.c
===================================================================
--- ../gcc/cgraphclones.c (revision 205737)
+++ ../gcc/cgraphclones.c (working copy)
@@ -123,7 +123,10 @@ cgraph_clone_edge (struct cgraph_edge *e
{
tree decl;
- if (call_stmt && (decl = gimple_call_fndecl (call_stmt)))
+ if (call_stmt && (decl = gimple_call_fndecl (call_stmt))
+ /* When the call is speculative, we need to resolve it
+ via cgraph_resolve_speculation and not here. */
+ && !e->speculative)
{
struct cgraph_node *callee = cgraph_get_node (decl);
gcc_checking_assert (callee);
The problem is that cgraph_clone_edge is too eager to turn the edge into a
direct edge because inliner managed to do the same resolution.
This fixes the ICE but we however ought to do this optimization at IPA level.
More information about the Gcc-bugs
mailing list