In some cases, when doing a pointer assignment with a arrays, the upper and
lower bounds on the pointer are not the same as on the pointee. This happens in
the convoluted case of a pointer declared in a module that is assigned to in a
subroutine. In the caller of that subroutine, the bounds of that pointer are
coming out incorrect. Below is a sample code showing the problem. It can be
built without any compiler options. I get this with the most recent version of
gfortran on linux (FC5).
$ gfortran --version
GNU Fortran (GCC) 4.3.0 20070821 (experimental) [trunk revision 127658]
Here is the sample program
-----------------------
module Lattice
integer:: ndrft
real(kind=8),pointer:: drftzs(:)
end module Lattice
program badpointerdims
use Lattice
real(kind=8),pointer:: p(:)
ndrft = 100
allocate(p(0:100))
call topsetpointerdrftzs(p)
print*,"p bounds ",lbound(p),ubound(p)
print*,"drftzs bounds ",lbound(drftzs),ubound(drftzs)
stop
end badpointerdims
subroutine setpointerdrftzs(p)
use Lattice
real(kind=8),target::p(0:ndrft)
drftzs => p
return
end setpointerdrftzs
-----------------------
The program prints the following output
p bounds 0 100
d bounds 1 101
I would expect that the d bounds be the same as the p bounds.
Thanks for your help!
Dave
--
Summary: array pointer assignment gives incorrect dimensions
Product: gcc
Version: 4.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dpgrote at lbl dot gov
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33139