From 224efaf7e1e9240b64602ea81a255cb43e4dcb0c Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Thu, 2 Apr 2020 11:16:17 +0200 Subject: [PATCH] [Fortran] Fix error cleanup of select rank (PR93522) PR fortran/93522 * match.c (gfc_match_select_rank): Fix error cleanup. PR fortran/93522 * gfortran.dg/select_rank_4.f90: New. --- gcc/fortran/ChangeLog | 5 ++++ gcc/fortran/match.c | 1 + gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gfortran.dg/select_rank_4.f90 | 26 +++++++++++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/select_rank_4.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 89de9d00fe2..c4ca48f6183 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2020-04-02 Tobias Burnus + + PR fortran/93522 + * match.c (gfc_match_select_rank): Fix error cleanup. + 2020-04-02 Steven G. Kargl PR fortran/93498 diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 8443d20dc4f..8ae34a94a95 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -6678,6 +6678,7 @@ gfc_match_select_rank (void) if (m != MATCH_YES) { + gfc_undo_symbols (); std::swap (ns, gfc_current_ns); gfc_free_namespace (ns); return m; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac1695f6098..a154849a837 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-04-02 Tobias Burnus + + PR fortran/93522 + * gfortran.dg/select_rank_4.f90: New. + 2020-04-02 Mark Eggleston PR fortran/93498 diff --git a/gcc/testsuite/gfortran.dg/select_rank_4.f90 b/gcc/testsuite/gfortran.dg/select_rank_4.f90 new file mode 100644 index 00000000000..e67070531d7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/select_rank_4.f90 @@ -0,0 +1,26 @@ +! { dg-do compile } +! +! PR fortran/93522 +! +! Contributed by Shubham Narlawar + +program rank_new + implicit none + integer :: some_var_assumed + integer, DIMENSION(3,2,1) :: array + PRINT *, RANK(array) + call CALL_ME(array) + contains +!No error expected + subroutine CALL_ME23(x) + implicit none + integer:: x(..), a=10,b=20 + integer, dimension(10) :: arr = (/1,2,3,4,5/) ! { dg-error "Different shape for array assignment at .1. on dimension 1 .10 and 5." } + select rank(arr(1:3)) ! { dg-error "Syntax error in argument list" } + RANK(1) ! { dg-error "Unexpected RANK statement" } + print *, "1" + rank(2) ! { dg-error "Unexpected RANK statement" } + print *, "2" + end select ! { dg-error "Expecting END SUBROUTINE statement" } + end subroutine +end program -- 2.30.2