fortran/
authoreedelman <eedelman@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Jan 2006 17:05:21 +0000 (17:05 +0000)
committereedelman <eedelman@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Jan 2006 17:05:21 +0000 (17:05 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110301 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/symbol.c

index 7fc7fb0..c395a0c 100644 (file)
@@ -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
index 33af725..111c692 100644 (file)
@@ -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;
 }