67 lines
1.8 KiB
Fortran
67 lines
1.8 KiB
Fortran
! { dg-do run }
|
|
!
|
|
! Verify that the bounds are correctly set when assigning pointers.
|
|
!
|
|
! PR fortran/33139
|
|
!
|
|
program prog
|
|
implicit none
|
|
real, target :: a(-10:10)
|
|
real, pointer :: p(:),p2(:)
|
|
integer :: i
|
|
do i = -10, 10
|
|
a(i) = real(i)
|
|
end do
|
|
p => a
|
|
p2 => p
|
|
if((lbound(p, dim=1) /= -10) .or. (ubound(p, dim=1) /= 10)) &
|
|
call abort()
|
|
if((lbound(p2,dim=1) /= -10) .or. (ubound(p2,dim=1) /= 10)) &
|
|
call abort()
|
|
do i = -10, 10
|
|
if(p(i) /= real(i)) call abort()
|
|
if(p2(i) /= real(i)) call abort()
|
|
end do
|
|
p => a(:)
|
|
p2 => p
|
|
if((lbound(p, dim=1) /= 1) .or. (ubound(p, dim=1) /= 21)) &
|
|
call abort()
|
|
if((lbound(p2,dim=1) /= 1) .or. (ubound(p2,dim=1) /= 21)) &
|
|
call abort()
|
|
p2 => p(:)
|
|
if((lbound(p2,dim=1) /= 1) .or. (ubound(p2,dim=1) /= 21)) &
|
|
call abort()
|
|
call multdim()
|
|
contains
|
|
subroutine multdim()
|
|
real, target, allocatable :: b(:,:,:)
|
|
real, pointer :: ptr(:,:,:)
|
|
integer :: i, j, k
|
|
allocate(b(-5:5,10:20,0:3))
|
|
do i = 0, 3
|
|
do j = 10, 20
|
|
do k = -5, 5
|
|
b(k,j,i) = real(i+10*j+100*k)
|
|
end do
|
|
end do
|
|
end do
|
|
ptr => b
|
|
if((lbound(ptr,dim=1) /= -5) .or. (ubound(ptr,dim=1) /= 5) .or. &
|
|
(lbound(ptr,dim=2) /= 10) .or. (ubound(ptr,dim=2) /= 20) .or. &
|
|
(lbound(ptr,dim=3) /= 0) .or. (ubound(ptr,dim=3) /= 3)) &
|
|
call abort()
|
|
do i = 0, 3
|
|
do j = 10, 20
|
|
do k = -5, 5
|
|
if(ptr(k,j,i) /= real(i+10*j+100*k)) call abort()
|
|
end do
|
|
end do
|
|
end do
|
|
ptr => b(:,:,:)
|
|
if((lbound(ptr,dim=1) /= 1) .or. (ubound(ptr,dim=1) /= 11) .or. &
|
|
(lbound(ptr,dim=2) /= 1) .or. (ubound(ptr,dim=2) /= 11) .or. &
|
|
(lbound(ptr,dim=3) /= 1) .or. (ubound(ptr,dim=3) /= 4)) &
|
|
call abort()
|
|
end subroutine multdim
|
|
end program prog
|