diff options
author | Martin Liska <mliska@suse.cz> | 2019-08-15 08:58:36 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-08-15 06:58:36 +0000 |
commit | cc8495056efac06fa57d36512903b06026c01470 (patch) | |
tree | 126d6233b485280fe6160d8873b0e6a55561d75b /gcc | |
parent | b275fd98f267ea870c9583e8a28f1348777786a3 (diff) | |
download | gcc-cc8495056efac06fa57d36512903b06026c01470.zip gcc-cc8495056efac06fa57d36512903b06026c01470.tar.gz gcc-cc8495056efac06fa57d36512903b06026c01470.tar.bz2 |
Clean next_nested properly.
2019-08-15 Martin Liska <mliska@suse.cz>
PR ipa/91438
* cgraph.c (cgraph_node::remove): When setting
n->origin = NULL for all nested functions, reset
also next_nested.
From-SVN: r274504
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cgraph.c | 11 |
2 files changed, 14 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b147c1..66de492 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2019-08-15 Martin Liska <mliska@suse.cz> + PR ipa/91438 + * cgraph.c (cgraph_node::remove): When setting + n->origin = NULL for all nested functions, reset + also next_nested. + +2019-08-15 Martin Liska <mliska@suse.cz> + * cgraph.c (cgraph_node::verify_node): Verify origin, nested and next_nested. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index eb38b90..ea8ab38 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1767,8 +1767,6 @@ cgraph_node::release_body (bool keep_arguments) void cgraph_node::remove (void) { - cgraph_node *n; - if (symtab->ipa_clones_dump_file && symtab->cloned_nodes.contains (this)) fprintf (symtab->ipa_clones_dump_file, "Callgraph removal;%s;%d;%s;%d;%d\n", asm_name (), order, @@ -1785,8 +1783,13 @@ cgraph_node::remove (void) */ force_output = false; forced_by_abi = false; - for (n = nested; n; n = n->next_nested) + cgraph_node *next = nested; + for (cgraph_node *n = nested; n; n = next) + { + next = n->next_nested; n->origin = NULL; + n->next_nested = NULL; + } nested = NULL; if (origin) { @@ -1840,7 +1843,7 @@ cgraph_node::remove (void) */ if (symtab->state != LTO_STREAMING) { - n = cgraph_node::get (decl); + cgraph_node *n = cgraph_node::get (decl); if (!n || (!n->clones && !n->clone_of && !n->global.inlined_to && ((symtab->global_info_ready || in_lto_p) |