| ! { 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" } |