aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/symbol.c10
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 7fc7fb0..c395a0c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2005-01-27 Erik Edelmann <eedelman@gcc.gnu.org>
+
+ * symbol.c (free_old_symbol): Fix confusing comment, and add code
+ to free old_symbol->formal.
+
2005-01-26 Paul Thomas <pault@gcc.gnu.org>
PR fortran/25964
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 33af725..111c692 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -2230,8 +2230,11 @@ gfc_undo_symbols (void)
}
-/* Free sym->old_symbol. sym->old_symbol is mostly a shallow copy of sym; but
- few components might have been given new values. */
+/* Free sym->old_symbol. sym->old_symbol is mostly a shallow copy of sym; the
+ components of old_symbol that might need deallocation are the "allocatables"
+ that are restored in gfc_undo_symbols(), with two exceptions: namelist and
+ namelist_tail. In case these differ between old_symbol and sym, it's just
+ because sym->namelist has gotten a few more items. */
static void
free_old_symbol (gfc_symbol * sym)
@@ -2245,6 +2248,9 @@ free_old_symbol (gfc_symbol * sym)
if (sym->old_symbol->value != sym->value)
gfc_free_expr (sym->old_symbol->value);
+ if (sym->old_symbol->formal != sym->formal)
+ gfc_free_formal_arglist (sym->old_symbol->formal);
+
gfc_free (sym->old_symbol);
sym->old_symbol = NULL;
}