40 lines
635 B
Fortran
40 lines
635 B
Fortran
! { dg-do run }
|
|
!
|
|
! PROCEDURE POINTERS as actual/formal arguments
|
|
!
|
|
! Contributed by Janus Weil <janus@gcc.gnu.org>
|
|
|
|
subroutine foo(j)
|
|
INTEGER, INTENT(OUT) :: j
|
|
j = 6
|
|
end subroutine
|
|
|
|
program proc_ptr_6
|
|
|
|
PROCEDURE(),POINTER :: ptr1
|
|
PROCEDURE(REAL),POINTER :: ptr2
|
|
EXTERNAL foo
|
|
INTEGER :: k = 0
|
|
|
|
ptr1 => foo
|
|
call s_in(ptr1,k)
|
|
if (k /= 6) call abort()
|
|
|
|
call s_out(ptr2)
|
|
if (ptr2(-3.0) /= 3.0) call abort()
|
|
|
|
contains
|
|
|
|
subroutine s_in(p,i)
|
|
PROCEDURE(),POINTER,INTENT(IN) :: p
|
|
INTEGER, INTENT(OUT) :: i
|
|
call p(i)
|
|
end subroutine
|
|
|
|
subroutine s_out(p)
|
|
PROCEDURE(REAL),POINTER,INTENT(OUT) :: p
|
|
p => abs
|
|
end subroutine
|
|
|
|
end program
|