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.

Reply via email to