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.
This commit is contained in:
parent
33bf56ddc6
commit
cbf10ac51c
5 changed files with 28 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
4
gcc/testsuite/gcc.dg/lto/pr96291.h
Normal file
4
gcc/testsuite/gcc.dg/lto/pr96291.h
Normal file
|
@ -0,0 +1,4 @@
|
|||
void e(void);
|
||||
void f(void);
|
||||
void a(void *, void *);
|
||||
void c(int);
|
11
gcc/testsuite/gcc.dg/lto/pr96291_0.c
Normal file
11
gcc/testsuite/gcc.dg/lto/pr96291_0.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* { dg-lto-do link } */
|
||||
|
||||
#include "pr96291.h"
|
||||
|
||||
static void * b;
|
||||
void c(int d) {
|
||||
f();
|
||||
a(b, b);
|
||||
}
|
||||
|
||||
void e(void) { c(0); }
|
3
gcc/testsuite/gcc.dg/lto/pr96291_1.c
Normal file
3
gcc/testsuite/gcc.dg/lto/pr96291_1.c
Normal file
|
@ -0,0 +1,3 @@
|
|||
#include "pr96291.h"
|
||||
|
||||
void f(void) { c(0); }
|
7
gcc/testsuite/gcc.dg/lto/pr96291_2.c
Normal file
7
gcc/testsuite/gcc.dg/lto/pr96291_2.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
/* { dg-options {-O0} } */
|
||||
|
||||
#include "pr96291.h"
|
||||
|
||||
void a(void * a1, void * a2) { e(); }
|
||||
|
||||
int main(){}
|
Loading…
Add table
Reference in a new issue