diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6259229a25e084ea6c6b62e0608f62690ec60a5c..f363d59a7503c2cf2a8283832eb71f6afad41ea8 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,7 @@
+2012-09-16  Mikael Morin  <mikael@gcc.gnu.org>
+
+	* symbol.c (gfc_undo_symbols): Correctly undo namelists.
+
 2012-09-15  Tobias Burnus  <burnus@net-b.de>
 
 	* trans-io.c (gfc_trans_transfer): Add an assert.
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index d68208d3010e9ec2ff7cedf91f585f1d7cf04a28..c914e65cac208b3614affd4f349f001ec4a2ec34 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -2996,7 +2996,7 @@ gfc_undo_symbols (void)
 	{
 	  if (p->namelist_tail != old->namelist_tail)
 	    {
-	      gfc_free_namelist (old->namelist_tail);
+	      gfc_free_namelist (old->namelist_tail->next);
 	      old->namelist_tail->next = NULL;
 	    }
 	}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6ae64584dc41e9351bfbfc6243eeb3249a378d85..b6f1990beb88c35602b0c5128b86b4aa91134c36 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2012-09-16  Mikael Morin  <mikael@gcc.gnu.org>
+
+	* gfortran.dg/namelist_75.f90: New test.
+
 2012-09-15  Tom de Vries  <tom@codesourcery.com>
 
 	* gcc.dg/tree-ssa/vrp82.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/namelist_75.f90 b/gcc/testsuite/gfortran.dg/namelist_75.f90
new file mode 100644
index 0000000000000000000000000000000000000000..c88da65d6b2c030d2835cf5ee360e7002ad383ec
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_75.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+!
+! Tests a write-after-free memory error fix in gfc_undo_symbols
+
+program test_nml
+
+  namelist /foo/ bar, baz
+  namelist /foo/ wrong, ,  ! { dg-error "Syntax error in NAMELIST" }
+
+end program test_nml