! { dg-do run }
!
! PR 36322/36463
!
! Original code by James Van Buskirk.
! Modified by Janus Weil <janus@gcc.gnu.org>

module m

   use ISO_C_BINDING

   character, allocatable, save :: my_message(:)

   abstract interface
      function abs_fun(x)
         use ISO_C_BINDING
         import my_message
         integer(C_INT) x(:)
         character(size(my_message),C_CHAR) abs_fun(size(x))
      end function abs_fun
   end interface 

contains

  function foo(y)
    implicit none
    integer(C_INT) :: y(:)
    character(size(my_message),C_CHAR) :: foo(size(y))
    integer i,j
    do i=1,size(y)
      do j=1,size(my_message)
        foo(i)(j:j) = achar(iachar(my_message(j))+y(i))
      end do
    end do
  end function

  subroutine check(p,a)
    use ISO_C_BINDING
    integer(C_INT) a(:)
    procedure(abs_fun) :: p
    character(size(my_message),C_CHAR) :: c(size(a))
    integer k,l,m
    c = p(a)
    m=iachar('a')
    do k=1,size(a)
      do l=1,size(my_message)
        if (c(k)(l:l) /= achar(m)) STOP 1
        m = m + 1
      end do
    end do
  end subroutine

end module

program prog

use m

integer(C_INT) :: i(4) = (/0,6,12,18/)

allocate(my_message(1:6))

my_message = (/'a','b','c','d','e','f'/)

call check(foo,i)

end program
