aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2018-02-24 17:22:10 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2018-02-24 17:22:10 +0000
commitc034c38f8d6becbe6d607910351acceb58b97854 (patch)
tree892f8aa8a7c976e64b07f6db68e8850271b42aff /gcc/fortran
parent118cd6baeda97b91c667bb5933a56a72f8c0dc84 (diff)
downloadgcc-c034c38f8d6becbe6d607910351acceb58b97854.zip
gcc-c034c38f8d6becbe6d607910351acceb58b97854.tar.gz
gcc-c034c38f8d6becbe6d607910351acceb58b97854.tar.bz2
re PR fortran/30792 (DATA implied-do substring allowed with -std=f95/f2003)
2018-02-24 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/30792 * decl.c (gfc_match_data): Check for invalid substring in data-implied-do 2018-02-24 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/30792 * gfortran.dg/data_substring.f90: New test. From-SVN: r257962
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/decl.c14
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 9be8a0d..6e69042 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-24 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/30792
+ * decl.c (gfc_match_data): Check for invalid substring in
+ data-implied-do
+
2018-02-23 Steven G. Kargl <kargl@gcc.gnu.org>
* intrinsic.texi: Arguments to MATMUL cannot both be rank one.
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index e275be3..e377a21 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -585,6 +585,20 @@ gfc_match_data (void)
if (m != MATCH_YES)
goto cleanup;
+ if (new_data->var->iter.var
+ && new_data->var->iter.var->ts.type == BT_INTEGER
+ && new_data->var->iter.var->symtree->n.sym->attr.implied_index == 1
+ && new_data->var->list
+ && new_data->var->list->expr
+ && new_data->var->list->expr->ts.type == BT_CHARACTER
+ && new_data->var->list->expr->ref
+ && new_data->var->list->expr->ref->type == REF_SUBSTRING)
+ {
+ gfc_error ("Invalid substring in data-implied-do at %L in DATA "
+ "statement", &new_data->var->list->expr->where);
+ goto cleanup;
+ }
+
m = top_val_list (new_data);
if (m != MATCH_YES)
goto cleanup;