This is an archive of the discontinued LLVM Phabricator instance.

[flang] Fix element indexing in derived type default initialization
ClosedPublic

Authored by clementval on Jan 25 2023, 1:24 AM.

Details

Summary

Derived type default initialization was not taking the step into
consideration.

module dt_init
  type p1
    integer :: a
  end type
  type, extends(p1) :: p2
    integer :: b = 10
  end type
contains
  subroutine init_dt(z)
    class(p1), intent(out) :: z(:)
    select type(z)
    type is (p2)
      print*,z
    end select
  end subroutine
end module
program test
  use dt_init
  type(p2) :: t(6) = [ p2(1,2),p2(3,4),p2(5,6),p2(7,8),p2(9,10),p2(11,12) ]
  print*,t
  call init_dt(t(::2))
  print*,t
end program

Without the fix, the three first elements are initialized

1 2 3 4 5 6 7 8 9 10 11 12
1 10 5 10 9 10
1 10 3 10 5 10 7 8 9 10 11 12

Where it should be element number 1,3,5

1 2 3 4 5 6 7 8 9 10 11 12
1 10 5 10 9 10
1 10 3 4 5 10 7 8 9 10 11 12

Diff Detail