summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/cgraph.c11
2 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9d3214e0292..cfc39d66abc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,16 @@
2019-08-23 Martin Liska <mliska@suse.cz>
+ PR ipa/91508
+ Backport from mainline
+ 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-23 Martin Liska <mliska@suse.cz>
+
Backport from mainline
2019-08-15 Martin Liska <mliska@suse.cz>
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index d9e7353bd7b..1febb6369a0 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1779,8 +1779,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,
@@ -1797,8 +1795,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)
{
@@ -1852,7 +1855,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)