! { 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) STOP 1 if (any (lcobound(A) /= [n, 3*n])) STOP 2 if (ucobound(A, dim=1) /= 2*n) STOP 3 end subroutine sub subroutine sub2(A,n) integer :: n integer :: A(:)[-n:*] if (lbound(A,dim=1) /= 1) STOP 4 if (lcobound(A, dim=1) /= -n) STOP 5 end subroutine sub2 subroutine sub3(A) integer :: A(:)[0,*] if (lbound(A,dim=1) /= 1) STOP 6 if (lcobound(A, dim=1) /= 1) STOP 7 if (ucobound(A, dim=1) /= 0) STOP 8 if (lcobound(A, dim=2) /= 1) STOP 9 end subroutine sub3 subroutine sub4(A) integer :: A(:)[*] if (lbound(A,dim=1) /= 1) STOP 10 if (lcobound(A, dim=1) /= 1) STOP 11 end subroutine sub4 subroutine sub5(A) integer, allocatable :: A(:)[:,:] if (lbound(A,dim=1) /= 1) STOP 12 if (lcobound(A, dim=1) /= 2) STOP 13 if (ucobound(A, dim=1) /= 3) STOP 14 if (lcobound(A, dim=2) /= 5) STOP 15 end subroutine sub5 end