diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6259229a25e..f363d59a750 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2012-09-16 Mikael Morin + + * symbol.c (gfc_undo_symbols): Correctly undo namelists. + 2012-09-15 Tobias Burnus * trans-io.c (gfc_trans_transfer): Add an assert. diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index d68208d3010..c914e65cac2 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 6ae64584dc4..b6f1990beb8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-09-16 Mikael Morin + + * gfortran.dg/namelist_75.f90: New test. + 2012-09-15 Tom de Vries * 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 00000000000..c88da65d6b2 --- /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