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