Committed as obvious (Rev. 172812).
Tobias
Index: gcc/testsuite/gfortran.dg/coarray_18.f90 =================================================================== --- gcc/testsuite/gfortran.dg/coarray_18.f90 (revision 0) +++ gcc/testsuite/gfortran.dg/coarray_18.f90 (revision 0) @@ -0,0 +1,39 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! Prevent ICE when exceeding the maximal number of allowed +! dimensions (normal + codimensions). +! +! Fortran 2008 allows (co)arrays with 15 ranks +! Currently, gfortran only supports 7, cf. PR 37577 +! Thus, the program is valid Fortran 2008 ... +! +! See also general coarray PR 18918 +! +! Test case taken from Leibniz-Rechenzentrum (LRZ)'s +! fortran_tests with thanks to Reinhold Bader. +! + +program ar + implicit none + integer :: ic(2)[*] + integer :: id(2,2)[2,*] + integer :: ie(2,2,2)[2,2,*] + integer :: ig(2,2,2,2)[2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ih(2,2,2,2,2)[2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ij(2,2,2,2,2,2)[2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ik(2,2,2,2,2,2,2)[2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: il[2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: im[2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: in[2,2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: io[2,2,2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + real :: x2(2,2,4)[2,*] + complex :: c2(4,2)[2,*] + double precision :: d2(1,5,9)[2,*] + character(len=1) :: ch2(2)[2,*] + character(len=2) :: ch22(-5:4)[2,*] + logical :: l2(17)[2,*] + if (this_image() == 1) then + write(*,*) 'OK' + end if +end program Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (revision 172811) +++ gcc/testsuite/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2011-04-21 Tobias Burnus <bur...@net-b.de> + + PR fortran/18918 + * gfortran.dg/coarray_18.f90: New. + 2011-04-20 Jason Merrill <ja...@redhat.com> * g++.dg/cpp0x/initlist47.C: New. Index: gcc/fortran/array.c =================================================================== --- gcc/fortran/array.c (revision 172811) +++ gcc/fortran/array.c (working copy) @@ -576,6 +576,13 @@ goto cleanup; } + if (as->rank >= GFC_MAX_DIMENSIONS) + { + gfc_error ("Array specification at %C has more than %d " + "dimensions", GFC_MAX_DIMENSIONS); + goto cleanup; + } + for (;;) { as->corank++; @@ -644,7 +651,7 @@ goto cleanup; } - if (as->corank >= GFC_MAX_DIMENSIONS) + if (as->rank + as->corank >= GFC_MAX_DIMENSIONS) { gfc_error ("Array specification at %C has more than %d " "dimensions", GFC_MAX_DIMENSIONS); Index: gcc/fortran/ChangeLog =================================================================== --- gcc/fortran/ChangeLog (revision 172811) +++ gcc/fortran/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2011-04-21 Tobias Burnus <bur...@net-b.de> + + PR fortran/18918 + * array.c (gfc_match_array_spec): Fix maximal rank(+corank) check. + 2011-04-20 Jim Meyering <meyer...@redhat.com> * expr.c (free_expr0): Remove useless if-before-free.