! { dg-do run }
!
! Test the fix for PR88393 in which a segfault occurred as indicated.
!
! Contributed by Janus Weil  <janus@gcc.gnu.org>
!
module m
   implicit none
   type :: t
      character(len=:), allocatable :: cs
   contains
      procedure :: ass
      generic :: assignment(=) => ass
   end type
contains
   subroutine ass(a, b)
      class(t), intent(inout) :: a
      class(t), intent(in)    :: b
      a%cs = b%cs
      print *, "ass"
   end subroutine
end module
program p
   use m
   implicit none
   type :: t2
      type(t) :: c
   end type
   type(t2), dimension(1:2) :: arr
   arr(1)%c%cs = "abcd"
   arr(2)%c = arr(1)%c  ! Segfault here.
   print *, "done", arr(2)%c%cs, arr(2)%c%cs
! Make sure with valgrind that there are no memory leaks.
   deallocate (arr(1)%c%cs)
   deallocate (arr(2)%c%cs)
end