From: Sergei Trofimovich <siarh...@google.com>

In PR ipa/96291 the test contained an SCC with one
unoptimized function. This tricked ipa-cp into NULL dereference.

has_undead_caller_from_outside_scc_p() did not take into account
that unoptimized funtions don't have IPA summary analysis. and
dereferenced NULL pointer causing an ICE.

        PR ipa/96291
        * ipa-cp.c (has_undead_caller_from_outside_scc_p): Consider
        unoptimized callers as undead.
---
 gcc/ipa-cp.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index b0c8f405260..d5082576962 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -5666,9 +5666,15 @@ has_undead_caller_from_outside_scc_p (struct cgraph_node 
*node,
        && cs->caller->call_for_symbol_thunks_and_aliases
          (has_undead_caller_from_outside_scc_p, NULL, true))
       return true;
-    else if (!ipa_edge_within_scc (cs)
-            && !IPA_NODE_REF (cs->caller)->node_dead)
-      return true;
+    else if (!ipa_edge_within_scc (cs))
+      {
+       /* Unoptimized callers don't have IPA information.
+          Conservatively assume callers are undead.  */
+       if (!IPA_NODE_REF (cs->caller))
+         return true;
+       if (!IPA_NODE_REF (cs->caller)->node_dead)
+         return true;
+      }
   return false;
 }
 
-- 
2.27.0

Reply via email to