aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-04-02 11:16:17 +0200
committerTobias Burnus <tobias@codesourcery.com>2020-04-02 11:16:17 +0200
commit224efaf7e1e9240b64602ea81a255cb43e4dcb0c (patch)
tree5c5197cae8944e67d0320e7acd7155f3bd4a408e
parentb7a98f48e06974ffca184335ff598cf3475e478f (diff)
downloadgcc-224efaf7e1e9240b64602ea81a255cb43e4dcb0c.zip
gcc-224efaf7e1e9240b64602ea81a255cb43e4dcb0c.tar.gz
gcc-224efaf7e1e9240b64602ea81a255cb43e4dcb0c.tar.bz2
[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.
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/match.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/select_rank_4.f9026
4 files changed, 37 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 89de9d0..c4ca48f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-02 Tobias Burnus <tobias@codesourcery.com>
+
+ PR fortran/93522
+ * match.c (gfc_match_select_rank): Fix error cleanup.
+
2020-04-02 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/93498
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 8443d20..8ae34a9 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 ac1695f..a154849 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-02 Tobias Burnus <tobias@codesourcery.com>
+
+ PR fortran/93522
+ * gfortran.dg/select_rank_4.f90: New.
+
2020-04-02 Mark Eggleston <mark.eggleston@codethink.com>
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 0000000..e670705
--- /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