1! { dg-do run }
2!
3! PR 36322/36463
4!
5! Contributed by Janus Weil <janus@gcc.gnu.org>
6
7module m
8
9contains
10
11  pure integer function mysize(a)
12    integer,intent(in) :: a(:)
13    mysize = size(a)
14  end function
15
16end module
17
18
19program prog
20
21use m
22implicit none
23
24abstract interface
25  function abs_fun(x,sz)
26    integer,intent(in) :: x(:)
27    interface
28      pure integer function sz(b)
29        integer,intent(in) :: b(:)
30      end function
31    end interface
32    integer :: abs_fun(sz(x))
33  end function
34end interface
35
36procedure(abs_fun) :: p
37
38integer :: k,j(3),i(3) = (/1,2,3/)
39
40j = p(i,mysize)
41
42do k=1,mysize(i)
43  if (j(k) /= 2*i(k)) call abort()
44end do
45
46end
47
48  function p(y,asz)
49    implicit none
50    integer,intent(in) :: y(:)
51    interface
52      pure integer function asz(c)
53        integer,intent(in) :: c(:)
54      end function
55    end interface
56    integer :: p(asz(y))
57    integer l
58    do l=1,asz(y)
59      p(l) = y(l)*2
60    end do
61  end function
62