! { dg-do run }
! Tests the fix for PR31213, which exposed rather a lot of
! bugs - see the PR and the ChangeLog.
!
! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
!
module mykinds
  implicit none
  integer, parameter :: ik1 = selected_int_kind (2)
  integer, parameter :: ik2 = selected_int_kind (4)
  integer, parameter :: dp = selected_real_kind (15,300)
end module mykinds

module spec_xpr
  use mykinds
  implicit none
  integer(ik2) c_size
contains
  pure function tricky (str,ugly)
    character(*), intent(in) :: str
    integer(ik1) :: ia_ik1(len(str))
    interface yoagly
      pure function ugly(n)
        use mykinds
        implicit none
        integer, intent(in) :: n
        complex(dp) :: ugly(3*n+2)
      end function ugly
    end interface yoagly
    logical :: la(size (yoagly (size (ia_ik1))))
    integer :: i
    character(tricky_helper ((/(.TRUE., i=1, size (la))/)) + c_size) :: tricky

    tricky = transfer (yoagly (1), tricky)
  end function tricky

  pure function tricky_helper (lb)
    logical, intent(in) :: lb(:)
    integer :: tricky_helper
    tricky_helper = 2 * size (lb) + 3
  end function tricky_helper
end module spec_xpr

module xtra_fun
  implicit none
contains
  pure function butt_ugly(n)
    use mykinds
    implicit none
    integer, intent(in) :: n
    complex(dp) :: butt_ugly(3*n+2)
    real(dp) pi, sq2

    pi = 4 * atan (1.0_dp)
    sq2 = sqrt (2.0_dp)
    butt_ugly = cmplx (pi, sq2, dp)
  end function butt_ugly
end module xtra_fun

program spec_test
  use mykinds
  use spec_xpr
  use xtra_fun
  implicit none
  character(54) :: chr

  c_size = 5
  if (tricky ('Help me', butt_ugly) .ne. transfer (butt_ugly (1), chr)) STOP 1
end program spec_test
