https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82996

--- Comment #2 from neil.n.carlson at gmail dot com ---
In the final example I drop the elemental attribute from the FOO final
procedure and modify the BAR final procedure to loop over the elements of its B
array component.  This too yields an ICE:

f951: internal compiler error: in generate_finalization_wrapper, at
fortran/class.c:1975

module mod

  type foo
    integer, pointer :: f(:) => null()
  contains
    final :: foo_destroy
  end type

  type bar
    type(foo) :: b(2)
  contains
    final :: bar_destroy
  end type

contains

  subroutine foo_destroy(this)
    type(foo), intent(inout) :: this
    if (associated(this%f)) deallocate(this%f)
  end subroutine

  subroutine bar_destroy(this)
    type(bar), intent(inout) :: this
    integer :: j
    do j = 1, size(this%b)
      call foo_destroy(this%b(j))
    end do
  end subroutine

end module

program main
  use mod
  type(bar) :: x
  call sub(x)
contains
  subroutine sub(x)
    type(bar), intent(out) :: x
  end subroutine
end program

Reply via email to