diff options
author | Sergei Trofimovich <siarheit@google.com> | 2020-07-25 19:26:50 +0100 |
---|---|---|
committer | Sergei Trofimovich <siarheit@google.com> | 2020-07-28 23:19:00 +0100 |
commit | cbf10ac51c0b889e930f260a3d1fb601332befdf (patch) | |
tree | 95169b2eda2b244bf69ce24ce299b1da4cec89c7 /gcc/ipa-cp.c | |
parent | 33bf56ddc6a757d2066a50dd9ce8323b379a2a0a (diff) | |
download | gcc-cbf10ac51c0b889e930f260a3d1fb601332befdf.zip gcc-cbf10ac51c0b889e930f260a3d1fb601332befdf.tar.gz gcc-cbf10ac51c0b889e930f260a3d1fb601332befdf.tar.bz2 |
ipa/96291: don't crash on unoptimized lto functions
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.
gcc/
PR ipa/96291
* ipa-cp.c (has_undead_caller_from_outside_scc_p): Consider
unoptimized callers as undead.
gcc/testsuite/
PR ipa/96291
* gcc.dg/lto/pr96291_0.c: New testcase.
* gcc.dg/lto/pr96291_1.c: Support file.
* gcc.dg/lto/pr96291_2.c: Likewise.
* gcc.dg/lto/pr96291.h: Likewise.
Diffstat (limited to 'gcc/ipa-cp.c')
-rw-r--r-- | gcc/ipa-cp.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index b0c8f40..fe010ff 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -5667,8 +5667,9 @@ has_undead_caller_from_outside_scc_p (struct cgraph_node *node, (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; + && (!IPA_NODE_REF (cs->caller) /* Unoptimized caller. */ + || !IPA_NODE_REF (cs->caller)->node_dead)) + return true; return false; } |