Clean next_nested properly.
authorMartin Liska <mliska@suse.cz>
Thu, 15 Aug 2019 06:58:36 +0000 (08:58 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 15 Aug 2019 06:58:36 +0000 (06:58 +0000)
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

gcc/ChangeLog
gcc/cgraph.c

index 4b147c19d567b13689eb37f14d24830f5966df46..66de492ebf57178d2024375d76ebf7a70aeb3462 100644 (file)
@@ -1,3 +1,10 @@
+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
index eb38b905879c530dd940b20905a1ac14369262fa..ea8ab38d8067ca1d584b3d41158b6b4aa81072f5 100644 (file)
@@ -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)