[Bug fortran/91077] [8/9/10 Regression] Wrong indexing when using a pointer
ygalklein at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Jul 4 08:28:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91077
ygal klein <ygalklein at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ygalklein at gmail dot com
--- Comment #4 from ygal klein <ygalklein at gmail dot com> ---
The following code presents a difference (!) between gfortran 8.2 and gfortran
9.1:
program test
implicit none
integer, parameter :: length = 2
real(8), dimension(length) :: a, b
integer :: i
type point
real(8) :: x
end type point
type points
type(point), dimension(:), pointer :: np=>null()
end type points
type stored
integer :: l
type(points), pointer :: nfpoint=>null()
end type stored
type(stored), dimension(:), pointer :: std=>null()
allocate(std(1))
allocate(std(1)%nfpoint)
allocate(std(1)%nfpoint%np(length))
std(1)%nfpoint%np(1)%x = 0.3d0
std(1)%nfpoint%np(2)%x = 0.3555d0
do i = 1, length
write(*, "('std(1)%nfpoint%np(',i1,')%x = ',1e22.14)") i,
std(1)%nfpoint%np(i)%x
end do
do i = 1, length
write(*, "('std(1)%nfpoint%np(1:',i1,')%x = ',2e22.14)") i,
std(1)%nfpoint%np(1:i)%x
end do
a = std(1)%nfpoint%np(1:2)%x
b = [std(1)%nfpoint%np(1)%x, std(1)%nfpoint%np(2)%x]
if (norm2(a - b) .gt. 1d-3) then
write(*,*) 'failure'
else
write(*, *) 'success'
end if
end program test
Running with gfortan-8.2 results with 'success' and running with gfortran-9.1
results with 'failure'.
Removing the integer variable 'l' from the type 'stored' makes both versions
(8.2 and 9.1) end with 'success'
Thanks.
More information about the Gcc-bugs
mailing list