aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/match.c6
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_8.f902
-rw-r--r--gcc/testsuite/gfortran.dg/pr56007.f10
-rw-r--r--gcc/testsuite/gfortran.dg/pr56007.f9011
6 files changed, 43 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c460a7e..56f2bdd 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2016-02-28 Harald Anlauf <anlauf@gmx.de>
+ Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/56007
+ * match.c (gfc_match_iterator): Add diagnostic for array variable
+ as do loop index.
+
2016-02-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Steven G. Kargl <kargl@gcc.gnu.org>
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index ef41781..2490f85 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -877,6 +877,12 @@ gfc_match_iterator (gfc_iterator *iter, int init_flag)
if (m != MATCH_YES)
return MATCH_NO;
+ if (var->symtree->n.sym->attr.dimension)
+ {
+ gfc_error ("Loop variable at %C cannot be an array");
+ goto cleanup;
+ }
+
/* F2008, C617 & C565. */
if (var->symtree->n.sym->attr.codimension)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e7ad0db..6dcb331 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2016-02-28 Harald Anlauf <anlauf@gmx.de>
+ Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/56007
+ * gfortran.dg/coarray_8.f90: Adjust error message.
+ * gfortran.dg/pr56007.f90: New test.
+ * gfortran.dg/pr56007.f: New test.
+
2016-02-28 H.J. Lu <hongjiu.lu@intel.com>
PR tree-optimization/69989
diff --git a/gcc/testsuite/gfortran.dg/coarray_8.f90 b/gcc/testsuite/gfortran.dg/coarray_8.f90
index 91d6e9a..db6eb6c 100644
--- a/gcc/testsuite/gfortran.dg/coarray_8.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_8.f90
@@ -146,7 +146,7 @@ end module mmm4
subroutine tfgh()
integer :: i(2)
DATA i/(i, i=1,2)/ ! { dg-error "Expected PARAMETER symbol" }
- do i = 1, 5 ! { dg-error "cannot be a sub-component" }
+ do i = 1, 5 ! { dg-error "cannot be an array" }
end do ! { dg-error "Expecting END SUBROUTINE" }
end subroutine tfgh
diff --git a/gcc/testsuite/gfortran.dg/pr56007.f b/gcc/testsuite/gfortran.dg/pr56007.f
new file mode 100644
index 0000000..644f28ef
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr56007.f
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! PR fortran/56007
+! Based on testcase by Tobias Schlüter
+
+ integer iw1(90), doiw1(90)
+ do iw1(1)=1
+ do iw1=1
+ do iw1=1,2 ! { dg-error "cannot be an array" }
+ end do ! { dg-error "Expecting END PROGRAM statement" }
+ END
diff --git a/gcc/testsuite/gfortran.dg/pr56007.f90 b/gcc/testsuite/gfortran.dg/pr56007.f90
new file mode 100644
index 0000000..b91baf5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr56007.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! PR fortran/56007
+! Based on testcase by Tobias Schlüter
+
+ integer iw1(90), doiw1(90)
+ do iw1=1,2 ! { dg-error "cannot be an array" }
+ end do ! { dg-error "Expecting END PROGRAM statement" }
+ do iw1(1)=1 ! { dg-error "Unclassifiable statement" }
+ do iw1=1 ! { dg-error "cannot be an array" }
+ end do ! { dg-error "Expecting END PROGRAM statement" }
+END program