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 {
