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