aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
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/fortran
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/fortran')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/match.c7
2 files changed, 13 insertions, 0 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)