https://gcc.gnu.org/g:12e97ffdb516bae81b823a247250dc2d7ce8e566

commit r16-7325-g12e97ffdb516bae81b823a247250dc2d7ce8e566
Author: Richard Biener <[email protected]>
Date:   Thu Feb 5 12:26:18 2026 +0100

    tree-optimization/123986 - upon SLP analysis rollback, release data
    
    The following makes sure to release any SLP kind specific data when
    rolling back earlier successful analysis.  This avoids crashing
    when re-analyzing such node via another graph entry.
    
            PR tree-optimization/123986
            * tree-vect-slp.cc (vect_slp_analyze_operations): When
            rolling back analyzed nodes, release node specific data
            and reset SLP_TREE_TYPE.

Diff:
---
 gcc/tree-vect-slp.cc | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index c481efc749f7..c932e8d5cba2 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -9258,10 +9258,19 @@ vect_slp_analyze_operations (vec_info *vinfo)
            dump_printf_loc (MSG_NOTE, vect_location,
                             "removing SLP instance operations starting from: 
%G",
                             stmt_info->stmt);
+         while (!visited_vec.is_empty ())
+           {
+             slp_tree node = visited_vec.pop ();
+             SLP_TREE_TYPE (node) = undef_vec_info_type;
+             if (node->data)
+               {
+                 delete node->data;
+                 node->data = nullptr;
+               }
+             visited.remove (node);
+           }
          vect_free_slp_instance (instance);
           vinfo->slp_instances.ordered_remove (i);
-         while (!visited_vec.is_empty ())
-           visited.remove (visited_vec.pop ());
        }
       else
        {

Reply via email to