ipa: Adjust cgraph verifier to materialization on demand (PR 98222)
after switching to materialization of clones on demand, the verifier can happen to see edges leading to a clone of a materialized clone. This means its clone_of is NULL and former_clone_of needs to be checked in order to verify that the callee is a clone of the original decl, which it did not do and reported edges to pointing to a wrong place. Fixed with the following patch, which has been pre-approved by Honza. Bootstrapped and tested on x86_64-linux, pushed to master. Martin gcc/ChangeLog: 2021-01-15 Martin Jambor <mjambor@suse.cz> PR ipa/98222 * cgraph.c (clone_of_p): Check also former_clone_of as we climb the clone tree. gcc/testsuite/ChangeLog: 2021-01-15 Martin Jambor <mjambor@suse.cz> PR ipa/98222 * gcc.dg/ipa/pr98222.c: New test.
This commit is contained in:
parent
3804e937b0
commit
0f4c8f517b
2 changed files with 22 additions and 1 deletions
|
@ -3081,7 +3081,9 @@ clone_of_p (cgraph_node *node, cgraph_node *node2)
|
|||
|
||||
if (!node->thunk && !node->former_thunk_p ())
|
||||
{
|
||||
while (node2 && node->decl != node2->decl)
|
||||
while (node2
|
||||
&& node->decl != node2->decl
|
||||
&& node->decl != node2->former_clone_of)
|
||||
node2 = node2->clone_of;
|
||||
return node2 != NULL;
|
||||
}
|
||||
|
|
19
gcc/testsuite/gcc.dg/ipa/pr98222.c
Normal file
19
gcc/testsuite/gcc.dg/ipa/pr98222.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3" } */
|
||||
|
||||
int a, b, *c;
|
||||
|
||||
int f (int j, int k) {
|
||||
b = k / j;
|
||||
if (a)
|
||||
f(0, 0);
|
||||
*c = f(b & a, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main() {
|
||||
if (a)
|
||||
while (1)
|
||||
f(0, 0);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue