On Sat, Jul 25, 2020 at 8:35 PM Sergei Trofimovich via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > 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.
Can you create a single-unit testcase with a SCC with one function having the no_ipa attribute? > 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 >