pointer_assign_4.f90

来自「用于进行gcc测试」· F90 代码 · 共 67 行

F90
67
字号
! { 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 multdimend program prog

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?