INTENT with POINTER formal parameters
Angelo Graziosi
angelo.graziosi@alice.it
Thu Jun 13 13:04:00 GMT 2013
On Cygwin, both gcc-4.5.3 and gcc-4.9 snapshot (my build) accept this code
module foo
implicit none
real, pointer :: arr(:,:)
contains
subroutine sub(a,dim)
implicit none
real, pointer, intent(in) :: a(:,:)
integer, intent(in) :: dim
integer :: i,j
do i = -3,dim
do j = -2,dim
print *, 'A(',i,',',j,')',a(i,j)
end do
end do
end subroutine sub
end module foo
program array_test
use foo
implicit none
integer :: ierr,n
print *, 'N : '
read *,n
allocate(arr(-3:n,-2:n),stat=ierr)
if (ierr /= 0) then
print *, '*** FATAL ERROR ***'
print *, 'ARR: Allocation request denied'
stop
end if
arr = 1.
call sub (arr,n)
deallocate(arr,stat=ierr)
if (ierr /= 0) then
print *, '*** FATAL ERROR ***'
print *, 'ARR: Deallocation request denied'
stop
end if
end program array_test
As you see the routine "sub" declare the formal parameter "a" as
real, pointer, intent(in) :: a(:,:)
i.e. it uses INTENT with the pointer variable. Now on a Fortran book I read
REAL, POINTER :: z(:) ! NB: INTENT not allowed here with POINTER
So which is true? Perhaps that was valid only with F90/95 and F2003/2008
allow it, now...
TIA,
Angelo.
More information about the Fortran
mailing list