| ! { 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 |