Hi, On Mon, Jul 27 2020, Richard Biener via Gcc-patches wrote: > 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?
This bug is LTO specific because otherwise a summary (although marked as quite useless) will be left over from the summary building stage. So Sergei, if you can afford to spend an extra while providing a testcase, you'll need to add three files into gcc/testsuite/gcc.dg/lto, with either the second or third (numbered _1 or _2)) having /* { dg-lto-options { { -flto -O0 } } } */ in them. Thanks, Martin > >> 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 >>