aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2019-06-19 18:18:40 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2019-06-19 18:18:40 +0000
commitef3e6aa32043fd8a285342aa6c668b636f5f0d41 (patch)
tree5d7ba6731d31e1f5649376b330e136395a152139 /gcc
parentc9935123aef8eac547cdd0e8b06811fc776a6b32 (diff)
downloadgcc-ef3e6aa32043fd8a285342aa6c668b636f5f0d41.zip
gcc-ef3e6aa32043fd8a285342aa6c668b636f5f0d41.tar.gz
gcc-ef3e6aa32043fd8a285342aa6c668b636f5f0d41.tar.bz2
re PR fortran/69499 ([F03] ICE-on-invalid on combining select type with wrong statement)
2019-06-19 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/69499 * match.c (gfc_match_select_type): SELECT TYPE is an executable statement, and cannot appear in MODULE or SUBMODULE scope. 2019-06-19 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/69499 * gfortran.dg/pr69499.f90: New test. * gfortran.dg/module_error_1.f90: Update dg-error string. From-SVN: r272482
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/match.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/module_error_1.f902
-rw-r--r--gcc/testsuite/gfortran.dg/pr69499.f907
5 files changed, 27 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2014342..bf54e29 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2019-06-19 Steven G. Kargl <kargl@gcc.gnu.org>
+ PR fortran/69499
+ * match.c (gfc_match_select_type): SELECT TYPE is an executable
+ statement, and cannot appear in MODULE or SUBMODULE scope.
+
+2019-06-19 Steven G. Kargl <kargl@gcc.gnu.org>
+
PR fortran/69398
* decl.c (attr_decl): Check for duplicate DIMENSION attribute for a
CLASS entity.
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 69698e5..1c08da7 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -6219,6 +6219,13 @@ gfc_match_select_type (void)
if (m != MATCH_YES)
return m;
+ if (gfc_current_state() == COMP_MODULE
+ || gfc_current_state() == COMP_SUBMODULE)
+ {
+ gfc_error ("SELECT TYPE at %C cannot appear in this scope");
+ return MATCH_ERROR;
+ }
+
gfc_current_ns = gfc_build_block_ns (ns);
m = gfc_match (" %n => %e", name, &expr2);
if (m == MATCH_YES)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5b81695..bb2e848 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,11 @@
2019-06-19 Steven G. Kargl <kargl@gcc.gnu.org>
+ PR fortran/69499
+ * gfortran.dg/pr69499.f90: New test.
+ * gfortran.dg/module_error_1.f90: Update dg-error string.
+
+2019-06-19 Steven G. Kargl <kargl@gcc.gnu.org>
+
PR fortran/69398
* gfortran.dg/pr69398.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/module_error_1.f90 b/gcc/testsuite/gfortran.dg/module_error_1.f90
index 84decc0..1792be6 100644
--- a/gcc/testsuite/gfortran.dg/module_error_1.f90
+++ b/gcc/testsuite/gfortran.dg/module_error_1.f90
@@ -1,5 +1,5 @@
! { dg-do compile }
! PR fortran/50627
module kernels
- select type (args) ! { dg-error "Unexpected SELECT TYPE" }
+ select type (args) ! { dg-error "cannot appear in this scope" }
end module kernels
diff --git a/gcc/testsuite/gfortran.dg/pr69499.f90 b/gcc/testsuite/gfortran.dg/pr69499.f90
new file mode 100644
index 0000000..169c6ce
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr69499.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/69499
+! Contributed by Gerhard Steinmetz.
+module m
+ class(*) :: z ! { dg-error "must be dummy, allocatable or pointer" }
+ select type (x => z) ! { dg-error "cannot appear in this scope" }
+end