1! { dg-do compile }
2
3! Type-bound procedures
4! Test that the basic syntax for specific bindings is parsed and resolved.
5
6MODULE othermod
7  IMPLICIT NONE
8
9CONTAINS
10
11  SUBROUTINE othersub ()
12    IMPLICIT NONE
13  END SUBROUTINE othersub
14
15END MODULE othermod
16
17MODULE testmod
18  USE othermod
19  IMPLICIT NONE
20
21  TYPE t1
22    ! Might be empty
23  CONTAINS
24    PROCEDURE proc1
25    PROCEDURE, PASS(me) :: p2 => proc2
26  END TYPE t1
27
28  TYPE t2
29    INTEGER :: x
30  CONTAINS
31    PRIVATE
32    PROCEDURE, NOPASS, PRIVATE :: othersub
33    PROCEDURE,NON_OVERRIDABLE,PUBLIC,PASS :: proc3
34  END TYPE t2
35
36  TYPE t3
37  CONTAINS
38    ! This might be empty for Fortran 2008
39  END TYPE t3
40
41  TYPE t4
42  CONTAINS
43    PRIVATE
44    ! Empty, too
45  END TYPE t4
46
47CONTAINS
48  
49  SUBROUTINE proc1 (me)
50    IMPLICIT NONE
51    CLASS(t1) :: me
52  END SUBROUTINE proc1
53
54  REAL FUNCTION proc2 (x, me)
55    IMPLICIT NONE
56    REAL :: x
57    CLASS(t1) :: me
58    proc2 = x / 2
59  END FUNCTION proc2
60
61  INTEGER FUNCTION proc3 (me)
62    IMPLICIT NONE
63    CLASS(t2) :: me
64    proc3 = 42
65  END FUNCTION proc3
66
67END MODULE testmod
68