64 lines
976 B
Fortran
64 lines
976 B
Fortran
! { dg-do run }
|
|
!
|
|
! PR 36322/36463
|
|
!
|
|
! Contributed by Janus Weil <janus@gcc.gnu.org>
|
|
|
|
module m
|
|
|
|
contains
|
|
|
|
pure integer function mysize(a)
|
|
integer,intent(in) :: a(:)
|
|
mysize = size(a)
|
|
end function
|
|
|
|
end module
|
|
|
|
|
|
program prog
|
|
|
|
use m
|
|
implicit none
|
|
|
|
abstract interface
|
|
function abs_fun(x,sz)
|
|
integer :: x(:)
|
|
interface
|
|
pure integer function sz(b)
|
|
integer,intent(in) :: b(:)
|
|
end function
|
|
end interface
|
|
integer :: abs_fun(sz(x))
|
|
end function
|
|
end interface
|
|
|
|
procedure(abs_fun) :: p
|
|
|
|
integer :: k,j(3),i(3) = (/1,2,3/)
|
|
|
|
j = p(i,mysize)
|
|
|
|
do k=1,mysize(i)
|
|
if (j(k) /= 2*i(k)) call abort()
|
|
end do
|
|
|
|
end
|
|
|
|
function p(y,asz)
|
|
implicit none
|
|
integer,intent(in) :: y(:)
|
|
interface
|
|
pure integer function asz(c)
|
|
integer,intent(in) :: c(:)
|
|
end function
|
|
end interface
|
|
integer :: p(asz(y))
|
|
integer l
|
|
do l=1,asz(y)
|
|
p(l) = y(l)*2
|
|
end do
|
|
end function
|
|
|
|
! { dg-final { cleanup-modules "m" } }
|