This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix corruption of call site hash with speculative edges


Hi,
this patch should fix cgrpah verifier ICE that occurs for speculative calls
with call site hash in caller.   Here we manage to wrong non-speculative
edge into the hash from time to time, when the edges are copied by inliner.

This patch fixes the problema and also fixes problem in
cgraph_turn_edge_to_speculative I noticed independently where
can_throw_external is not cleared when callee is nothrow.

Bootstrapped/regtested x86_64-linux and also profiledbootstrapped.
Will commit it shortly.
I get occasional ICE in verifier for dead refs after saving inline
body.  I will look into that next.

Honza

	PR bootstrap/58186
	* cgraph.c (cgraph_add_edge_to_call_site_hash): Overwrite hash
	entry for direct edges.
	(cgraph_turn_edge_to_speculative): Fix setting of can_throw_external.
	
Index: cgraph.c
===================================================================
--- cgraph.c	(revision 201838)
+++ cgraph.c	(working copy)
@@ -701,6 +701,8 @@ cgraph_add_edge_to_call_site_hash (struc
   if (*slot)
     {
       gcc_assert (((struct cgraph_edge *)*slot)->speculative);
+      if (e->callee)
+	*slot = e;
       return;
     }
   gcc_assert (!*slot || e->speculative);
@@ -1083,8 +1085,10 @@ cgraph_turn_edge_to_speculative (struct
   e2 = cgraph_create_edge (n, n2, e->call_stmt, direct_count, direct_frequency);
   initialize_inline_failed (e2);
   e2->speculative = true;
-  e2->call_stmt = e->call_stmt;
-  e2->can_throw_external = e->can_throw_external;
+  if (TREE_NOTHROW (n2->symbol.decl))
+    e2->can_throw_external = false;
+  else
+    e2->can_throw_external = e->can_throw_external;
   e2->lto_stmt_uid = e->lto_stmt_uid;
   e->count -= e2->count;
   e->frequency -= e2->frequency;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]