ipa: Release body more carefully when removing nodes (PR 107944)
The code removing function bodies when the last call graph clone of a node is removed is too aggressive when there are nodes up the clone_of chain which still need them. Fixed by expanding the check. gcc/ChangeLog: 2023-01-18 Martin Jambor <mjambor@suse.cz> PR ipa/107944 * cgraph.cc (cgraph_node::remove): Check whether nodes up the lcone_of chain also do not need the body.
This commit is contained in:
parent
d4abe5c456
commit
db959e2500
1 changed files with 12 additions and 2 deletions
|
@ -1893,8 +1893,18 @@ cgraph_node::remove (void)
|
|||
else if (clone_of)
|
||||
{
|
||||
clone_of->clones = next_sibling_clone;
|
||||
if (!clone_of->analyzed && !clone_of->clones && !clones)
|
||||
clone_of->release_body ();
|
||||
if (!clones)
|
||||
{
|
||||
bool need_body = false;
|
||||
for (cgraph_node *n = clone_of; n; n = n->clone_of)
|
||||
if (n->analyzed || n->clones)
|
||||
{
|
||||
need_body = true;
|
||||
break;
|
||||
}
|
||||
if (!need_body)
|
||||
clone_of->release_body ();
|
||||
}
|
||||
}
|
||||
if (next_sibling_clone)
|
||||
next_sibling_clone->prev_sibling_clone = prev_sibling_clone;
|
||||
|
|
Loading…
Add table
Reference in a new issue