! { dg-do run }
! PR51870 - ALLOCATE with class function expression for SOURCE failed.
! This version of the test allocates class arrays with MOLD.
!
! Reported by Tobias Burnus  <burnus@gcc.gnu.org>
!
module show_producer_class
  implicit none
  type integrand
    integer :: variable = 1
  end type integrand

  type show_producer
  contains
    procedure ,nopass :: create_show
    procedure ,nopass :: create_show_array
  end type
contains
  function create_show () result(new_integrand)
    class(integrand) ,allocatable :: new_integrand
    allocate(new_integrand)
    new_integrand%variable = -1
  end function
  function create_show_array (n) result(new_integrand)
    class(integrand) ,allocatable :: new_integrand(:)
    integer :: n, i
    allocate(new_integrand(n))
    select type (new_integrand)
      type is (integrand); new_integrand%variable = [(i, i= 1, n)]
    end select
  end function
end module

program main
  use show_producer_class
  implicit none
  class(integrand) ,allocatable :: kernel1(:), kernel2(:)
  type(show_producer) :: executive_producer

  allocate(kernel1(5), kernel2(5),mold=executive_producer%create_show_array (5))
  select type(kernel1)
    type is (integrand);  if (any (kernel1%variable .ne. 1)) call abort
  end select

  deallocate (kernel1)

  allocate(kernel1(3),mold=executive_producer%create_show ())
  select type(kernel1)
    type is (integrand); if (any (kernel1%variable .ne. 1)) call abort
  end select

  deallocate (kernel1)

  select type(kernel2)
    type is (integrand); kernel2%variable = [1,2,3,4,5]
  end select

  allocate(kernel1(3),source = kernel2(3:5))
  select type(kernel1)
    type is (integrand); if (any (kernel1%variable .ne. [3,4,5])) call abort
  end select
end program
! { dg-final { cleanup-modules "show_producer_class" } }

