Kaiweng's patch to stop freeing riscv_arch_string was correct, but incomplete as there's another path that was freeing that node, which is just plain wrong for a node allocated by the GC system.

This patch removes that call to free() which fixes the test. I've spun it in my tester and will obviously wait for the pre-commit system to render a verdict before moving forward.

Jeff

        PR target/119865
gcc/
        * config/riscv/riscv.cc (parse_features_for_version): Do not
        explicitly free the architecture string.

diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index d3656a7a430..bad59e248d0 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -13136,9 +13136,6 @@ parse_features_for_version (tree decl,
                                          DECL_SOURCE_LOCATION (decl));
   gcc_assert (parse_res);
 
-  if (arch_string != default_opts->x_riscv_arch_string)
-    free (CONST_CAST (void *, (const void *) arch_string));
-
   cl_target_option_restore (&global_options, &global_options_set,
                            &cur_target);
 }

Reply via email to