https://gcc.gnu.org/g:9f5b508bc5c16ae11ea385f6031487a518f62c8f

commit r15-7914-g9f5b508bc5c16ae11ea385f6031487a518f62c8f
Author: Thomas Koenig <tkoe...@gcc.gnu.org>
Date:   Sun Mar 9 19:35:06 2025 +0100

    Use gfc_commit_symbol() to remove UNDO status instead of new function.
    
    This is a cleaner version, removing an unneeded function and
    making sure that no memory leaks can occur if callers change.
    
    gcc/fortran/ChangeLog:
    
            PR fortran/119157
            * gfortran.h (gfc_pop_undo_symbol): Remove prototype.
            * interface.cc (gfc_get_formal_from_actual_arglist): Use
            gfc_commit_symbol() instead of gfc_pop_undo_symbol().
            * symbol.cc (gfc_pop_undo_symbol): Remove.

Diff:
---
 gcc/fortran/gfortran.h   | 1 -
 gcc/fortran/interface.cc | 4 ++--
 gcc/fortran/symbol.cc    | 5 -----
 3 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index f81be1d984c5..cf48d025768a 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -3736,7 +3736,6 @@ void gfc_traverse_user_op (gfc_namespace *, void 
(*)(gfc_user_op *));
 void gfc_save_all (gfc_namespace *);
 
 void gfc_enforce_clean_symbol_state (void);
-void gfc_pop_undo_symbol (void);
 
 gfc_gsymbol *gfc_get_gsymbol (const char *, bool bind_c);
 gfc_gsymbol *gfc_find_gsymbol (gfc_gsymbol *, const char *);
diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc
index e3bc22f25e58..c59ed1f5306c 100644
--- a/gcc/fortran/interface.cc
+++ b/gcc/fortran/interface.cc
@@ -5836,8 +5836,6 @@ gfc_get_formal_from_actual_arglist (gfc_symbol *sym,
        {
          snprintf (name, GFC_MAX_SYMBOL_LEN, "_formal_%d", var_num ++);
          gfc_get_symbol (name, gfc_current_ns, &s);
-         /* We do not need this in an undo table.  */
-         gfc_pop_undo_symbol();
          if (a->expr->ts.type == BT_PROCEDURE)
            {
              gfc_symbol *asym = a->expr->symtree->n.sym;
@@ -5878,12 +5876,14 @@ gfc_get_formal_from_actual_arglist (gfc_symbol *sym,
          s->declared_at = a->expr->where;
          s->attr.intent = INTENT_UNKNOWN;
          (*f)->sym = s;
+         gfc_commit_symbol (s);
        }
       else  /* If a->expr is NULL, this is an alternate rerturn.  */
        (*f)->sym = NULL;
 
       f = &((*f)->next);
     }
+
 }
 
 
diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc
index 92cba4187842..81aa81df2eec 100644
--- a/gcc/fortran/symbol.cc
+++ b/gcc/fortran/symbol.cc
@@ -3898,11 +3898,6 @@ enforce_single_undo_checkpoint (void)
   gcc_checking_assert (single_undo_checkpoint_p ());
 }
 
-void
-gfc_pop_undo_symbol ()
-{
-  latest_undo_chgset->syms.pop();
-}
 
 /* Undoes all the changes made to symbols in the current statement.  */

Reply via email to