blob: 178baea1ea397d58d23990c1b76158efc3050f75 [file] [log] [blame]
! { dg-do run }
! { dg-options "-fcoarray=single -fcheck=bounds" }
!
! Coarray support -- allocatable array coarrays
! -- intrinsic procedures
! PR fortran/18918
! PR fortran/43931
!
program test
implicit none
integer,allocatable :: B(:)[:]
call one()
call two()
allocate(B(3)[-4:*])
call three(3,B,1)
call three_a(3,B)
call three_b(3,B)
call four(B)
call five()
contains
subroutine one()
integer, allocatable :: a(:)[:,:,:]
allocate(a(1)[-4:9,8,4:*])
if (this_image(a,dim=1) /= -4_8) STOP 1
if (lcobound (a,dim=1) /= -4_8) STOP 2
if (ucobound (a,dim=1) /= 9_8) STOP 3
if (this_image(a,dim=2) /= 1_8) STOP 4
if (lcobound (a,dim=2) /= 1_8) STOP 5
if (ucobound (a,dim=2) /= 8_8) STOP 6
if (this_image(a,dim=3) /= 4_8) STOP 7
if (lcobound (a,dim=3) /= 4_8) STOP 8
if (ucobound (a,dim=3) /= 4_8) STOP 9
if (any(this_image(a) /= [-4_8, 1_8, 4_8])) STOP 10
if (any(lcobound (a) /= [-4_8, 1_8, 4_8])) STOP 11
if (any(ucobound (a) /= [9_8, 8_8, 4_8])) STOP 12
end subroutine one
subroutine two()
integer, allocatable :: a(:)[:,:,:]
allocate(a(1)[-4:9,8,4:*])
if (this_image(a,dim=1) /= -4) STOP 13
if (lcobound (a,dim=1) /= -4) STOP 14
if (ucobound (a,dim=1) /= 9) STOP 15
if (this_image(a,dim=2) /= 1) STOP 16
if (lcobound (a,dim=2) /= 1) STOP 17
if (ucobound (a,dim=2) /= 8) STOP 18
if (this_image(a,dim=3) /= 4) STOP 19
if (lcobound (a,dim=3) /= 4) STOP 20
if (ucobound (a,dim=3) /= 4) STOP 21
if (any(this_image(a) /= [-4, 1, 4])) STOP 22
if (any(lcobound (a) /= [-4, 1, 4])) STOP 23
if (any(ucobound (a) /= [9, 8, 4])) STOP 24
end subroutine two
subroutine three(n,A, n2)
integer :: n, n2
integer :: A(3)[n:*]
A(1) = 42
if (A(1) /= 42) STOP 25
A(1)[n2] = -42
if (A(1)[n2] /= -42) STOP 26
if (this_image(A,dim=1) /= n) STOP 27
if (lcobound (A,dim=1) /= n) STOP 28
if (ucobound (A,dim=1) /= n) STOP 29
if (any(this_image(A) /= n)) STOP 30
if (any(lcobound (A) /= n)) STOP 31
if (any(ucobound (A) /= n)) STOP 32
end subroutine three
subroutine three_a(n,A)
integer :: n
integer :: A(3)[n+2:n+5,n-1:*]
A(1) = 42
if (A(1) /= 42) STOP 33
A(1)[4,n] = -42
if (A(1)[4,n] /= -42) STOP 34
if (this_image(A,dim=1) /= n+2) STOP 35
if (lcobound (A,dim=1) /= n+2) STOP 36
if (ucobound (A,dim=1) /= n+5) STOP 37
if (this_image(A,dim=2) /= n-1) STOP 38
if (lcobound (A,dim=2) /= n-1) STOP 39
if (ucobound (A,dim=2) /= n-1) STOP 40
if (any(this_image(A) /= [n+2,n-1])) STOP 41
if (any(lcobound (A) /= [n+2,n-1])) STOP 42
if (any(ucobound (A) /= [n+5,n-1])) STOP 43
end subroutine three_a
subroutine three_b(n,A)
integer :: n
integer :: A(-1:3,0:4,-2:5,-4:7)[n+2:n+5,n-1:*]
A(-1,0,-2,-4) = 42
if (A(-1,0,-2,-4) /= 42) STOP 44
A(1,0,-2,-4) = 99
if (A(1,0,-2,-4) /= 99) STOP 45
if (this_image(A,dim=1) /= n+2) STOP 46
if (lcobound (A,dim=1) /= n+2) STOP 47
if (ucobound (A,dim=1) /= n+5) STOP 48
if (this_image(A,dim=2) /= n-1) STOP 49
if (lcobound (A,dim=2) /= n-1) STOP 50
if (ucobound (A,dim=2) /= n-1) STOP 51
if (any(this_image(A) /= [n+2,n-1])) STOP 52
if (any(lcobound (A) /= [n+2,n-1])) STOP 53
if (any(ucobound (A) /= [n+5,n-1])) STOP 54
end subroutine three_b
subroutine four(A)
integer, allocatable :: A(:)[:]
if (this_image(A,dim=1) /= -4_8) STOP 55
if (lcobound (A,dim=1) /= -4_8) STOP 56
if (ucobound (A,dim=1) /= -4_8) STOP 57
end subroutine four
subroutine five()
integer, save :: foo(2)[5:7,4:*]
integer :: i
i = 1
foo(1)[5,4] = 42
if (foo(1)[5,4] /= 42) STOP 58
if (this_image(foo,dim=i) /= 5) STOP 59
if (lcobound(foo,dim=i) /= 5) STOP 60
if (ucobound(foo,dim=i) /= 7) STOP 61
i = 2
if (this_image(foo,dim=i) /= 4) STOP 62
if (lcobound(foo,dim=i) /= 4) STOP 63
if (ucobound(foo,dim=i) /= 4) STOP 64
end subroutine five
end program test