| ! { dg-do run } |
| ! |
| ! PR fortran/18918 |
| ! |
| ! Check whether assumed-shape's cobounds are properly handled |
| ! |
| implicit none |
| integer :: B(1)[*] |
| integer :: C(8:11)[-3:10,43:*] |
| integer, allocatable :: D(:)[:,:] |
| |
| allocate (D(20)[2:3,5:*]) |
| |
| call sub (B,5) |
| call sub (C,3) |
| call sub (D,3) |
| |
| call sub2 (B, -3) |
| call sub2 (C, 44) |
| call sub2 (D, 44) |
| |
| call sub3 (B) |
| call sub3 (C) |
| call sub3 (D) |
| |
| call sub4 (B) |
| call sub4 (C) |
| call sub4 (D) |
| |
| call sub5 (D) |
| contains |
| |
| subroutine sub(A,n) |
| integer :: n |
| integer :: A(n:)[n:2*n,3*n:*] |
| if (lbound(A,dim=1) /= n) call abort () |
| if (any (lcobound(A) /= [n, 3*n])) call abort () |
| if (ucobound(A, dim=1) /= 2*n) call abort() |
| end subroutine sub |
| |
| subroutine sub2(A,n) |
| integer :: n |
| integer :: A(:)[-n:*] |
| if (lbound(A,dim=1) /= 1) call abort () |
| if (lcobound(A, dim=1) /= -n) call abort () |
| end subroutine sub2 |
| |
| subroutine sub3(A) |
| integer :: A(:)[0,*] |
| if (lbound(A,dim=1) /= 1) call abort () |
| if (lcobound(A, dim=1) /= 1) call abort () |
| if (ucobound(A, dim=1) /= 0) call abort () |
| if (lcobound(A, dim=2) /= 1) call abort () |
| end subroutine sub3 |
| |
| subroutine sub4(A) |
| integer :: A(:)[*] |
| if (lbound(A,dim=1) /= 1) call abort () |
| if (lcobound(A, dim=1) /= 1) call abort () |
| end subroutine sub4 |
| |
| subroutine sub5(A) |
| integer, allocatable :: A(:)[:,:] |
| |
| if (lbound(A,dim=1) /= 1) call abort () |
| if (lcobound(A, dim=1) /= 2) call abort () |
| if (ucobound(A, dim=1) /= 3) call abort () |
| if (lcobound(A, dim=2) /= 5) call abort () |
| end subroutine sub5 |
| end |