From 9a0bab0be682be2aaee5f1146518c4d94d44ac8e Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Tue, 26 May 2009 21:23:45 +0200 Subject: [PATCH] re PR fortran/40246 (ICE on invalid SOURCE= using NULLIFY) 2009-05-26 Tobias Burnus PR fortran/40246 * match.c (gfc_match_nullify): NULLify freed pointer. 2009-05-26 Tobias Burnus PR fortran/40246 * gfortran.dg/nullify_4.f90: New test. From-SVN: r147879 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/match.c | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/nullify_4.f90 | 8 ++++++++ 4 files changed, 23 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/nullify_4.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7695b79501d7..048d44e191a9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2009-05-26 Tobias Burnus + + PR fortran/40246 + * match.c (gfc_match_nullify): NULLify freed pointer. + 2009-05-26 Ian Lance Taylor * Make-lang.in (gfortranspec.o): Use $(COMPILER). diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index ed7bf58bb861..cf558b54e1b9 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -2418,6 +2418,11 @@ syntax: cleanup: gfc_free_statements (new_st.next); + new_st.next = NULL; + gfc_free_expr (new_st.expr1); + new_st.expr1 = NULL; + gfc_free_expr (new_st.expr2); + new_st.expr2 = NULL; return MATCH_ERROR; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6163fcf04fa1..f42781b6ddfe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-26 Tobias Burnus + + PR fortran/40246 + * gfortran.dg/nullify_4.f90: New test. + 2009-05-26 Richard Guenther * gcc.dg/tree-ssa/inline-3.c: Remove dump file. diff --git a/gcc/testsuite/gfortran.dg/nullify_4.f90 b/gcc/testsuite/gfortran.dg/nullify_4.f90 new file mode 100644 index 000000000000..48dcf72ca9d2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/nullify_4.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/40246 +! +! Check error recovery; was crashing before. +! +real, pointer :: ptr +nullify(ptr, mesh%coarser) ! { dg-error "Syntax error in NULLIFY statement" } +end -- 2.43.5