1! { dg-do run }
2
3! Type-bound procedures
4! Check calls with GENERIC bindings.
5
6MODULE m
7  IMPLICIT NONE
8
9  TYPE t
10  CONTAINS
11    PROCEDURE, NOPASS :: plain_int
12    PROCEDURE, NOPASS :: plain_real
13    PROCEDURE, PASS(me) :: passed_intint
14    PROCEDURE, PASS(me) :: passed_realreal
15
16    GENERIC :: gensub => plain_int, plain_real, passed_intint, passed_realreal
17  END TYPE t
18
19CONTAINS
20
21  SUBROUTINE plain_int (x)
22    IMPLICIT NONE
23    INTEGER :: x
24    WRITE (*,*) "Plain Integer"
25  END SUBROUTINE plain_int
26
27  SUBROUTINE plain_real (x)
28    IMPLICIT NONE
29    REAL :: x
30    WRITE (*,*) "Plain Real"
31  END SUBROUTINE plain_real
32
33  SUBROUTINE passed_intint (me, x, y)
34    IMPLICIT NONE
35    CLASS(t) :: me
36    INTEGER :: x, y
37    WRITE (*,*) "Passed Integer"
38  END SUBROUTINE passed_intint
39
40  SUBROUTINE passed_realreal (x, me, y)
41    IMPLICIT NONE
42    REAL :: x, y
43    CLASS(t) :: me
44    WRITE (*,*) "Passed Real"
45  END SUBROUTINE passed_realreal
46
47END MODULE m
48
49PROGRAM main
50  USE m
51  IMPLICIT NONE
52
53  TYPE(t) :: myobj
54
55  CALL myobj%gensub (5)
56  CALL myobj%gensub (2.5)
57  CALL myobj%gensub (5, 5)
58  CALL myobj%gensub (2.5, 2.5)
59END PROGRAM main
60
61! { dg-output "Plain Integer(\n|\r\n|\r).*Plain Real(\n|\r\n|\r).*Passed Integer(\n|\r\n|\r).*Passed Real" }
62