Allocatable objects as dummy arguments

I tried to use allocatable objects as dummy arguments, a new feature of Fortran 2003. Here is the code:

module demo
contains
   subroutine initialize(array1, array2)
      real, dimension(:,:), allocatable, intent(out) :: array1, array2
      integer, parameter :: n = 4
      allocate(array1(n, n))
      allocate(array2(n, n))
      array1 = 1
      array2 = 0
   end subroutine initialize
end module 

program test
   use demo
   real, dimension(:,:), allocatable :: a, b
   integer i, j
   call initialize(a, b)
   write(*,*) a
   write(*,*) ''
   write(*,*) b
   write(*,*) ''
   write(*,*) size(a,1), size(a,2), lbound(a), ubound(a)
   write(*,*) size(b,1), size(b,2), lbound(b), ubound(b)
   write(*,*) a(1,1)
end program

I compiled it with the following command with no compilation error:

PGF95 -g -C -Mallocatable=03 -Mbounds -Mchkstk -Mchkptr -Mchkfpstk -Mdclchk test.f90

However, I got runtime error for the last sentence “write(,) a(1,1)”:

0: Subscript out of range for array a (test.f90: 24)                                       
    subscript=1, lower bound=4446251, upper bound=8458106, dimension=1

It seems that both arrays have been returned to the main program with correct sizes and bounds. I just can’t figure out why such error occurred. Had I made any mistake here? Thanks!

Andrew

Hi Andrew,

Thanks for reporting a problem to us. We have filed a TPR # 14279 for this bug.

Hongyon