diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/match.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_8.f90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr56007.f | 10 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr56007.f90 | 11 |
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 |