1! { dg-do run } 2! 3! PROCEDURE POINTERS as actual/formal arguments 4! 5! Contributed by Janus Weil <janus@gcc.gnu.org> 6 7subroutine foo(j) 8 INTEGER, INTENT(OUT) :: j 9 j = 6 10end subroutine 11 12program proc_ptr_6 13 14PROCEDURE(),POINTER :: ptr1 15PROCEDURE(REAL),POINTER :: ptr2 16EXTERNAL foo 17INTEGER :: k = 0 18 19ptr1 => foo 20call s_in(ptr1,k) 21if (k /= 6) STOP 1 22 23call s_out(ptr2) 24if (ptr2(-3.0) /= 3.0) STOP 2 25 26contains 27 28subroutine s_in(p,i) 29 PROCEDURE(),POINTER,INTENT(IN) :: p 30 INTEGER, INTENT(OUT) :: i 31 call p(i) 32end subroutine 33 34subroutine s_out(p) 35 PROCEDURE(REAL),POINTER,INTENT(OUT) :: p 36 p => abs 37end subroutine 38 39end program 40