1! { dg-do run }
2
3! Type-bound procedures
4! Check that calls work across module-boundaries.
5
6MODULE m
7  IMPLICIT NONE
8
9  TYPE trueOrFalse
10    LOGICAL :: val
11  CONTAINS
12    PROCEDURE, PASS :: swap
13  END TYPE trueOrFalse
14
15CONTAINS
16
17  SUBROUTINE swap (me1, me2)
18    IMPLICIT NONE
19    CLASS(trueOrFalse), INTENT(INOUT) :: me1, me2
20
21    IF (.NOT. me1%val .OR. me2%val) THEN
22      CALL abort ()
23    END IF
24    
25    me1%val = .FALSE.
26    me2%val = .TRUE.
27  END SUBROUTINE swap
28
29END MODULE m
30
31PROGRAM main
32  USE m, ONLY: trueOrFalse
33  IMPLICIT NONE
34
35  TYPE(trueOrFalse) :: t, f
36
37  t%val = .TRUE.
38  f%val = .FALSE.
39
40  CALL t%swap (f)
41  CALL f%swap (t)
42
43  IF (.NOT. t%val .OR. f%val) THEN
44    CALL abort ()
45  END IF
46END PROGRAM main
47