aboutsummaryrefslogtreecommitdiff
path: root/gcc
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
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')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/decl.c14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/data_substring.f906
4 files changed, 31 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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1a0bcd3..60d8a9e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-02-24 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/30792
+ * gfortran.dg/data_substring.f90: New test.
+
2018-02-24 Marek Polacek <polacek@redhat.com>
PR c++/83692
diff --git a/gcc/testsuite/gfortran.dg/data_substring.f90 b/gcc/testsuite/gfortran.dg/data_substring.f90
new file mode 100644
index 0000000..6d6b2c0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/data_substring.f90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! PR fortran/30792
+character string*1025
+integer i
+data (string(i:i),i=1,1025)/1025*'?'/ ! { dg-error "Invalid substring" }
+end