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