! { dg-do compile } ! Type-bound procedures ! Check correct type-bound operator definitions. MODULE m IMPLICIT NONE TYPE t LOGICAL :: x CONTAINS PROCEDURE, PASS :: onearg PROCEDURE, PASS :: twoarg1 PROCEDURE, PASS :: twoarg2 PROCEDURE, PASS(me) :: assign_proc GENERIC :: OPERATOR(.BINARY.) => twoarg1, twoarg2 GENERIC :: OPERATOR(.UNARY.) => onearg GENERIC :: ASSIGNMENT(=) => assign_proc END TYPE t CONTAINS INTEGER FUNCTION onearg (me) CLASS(t), INTENT(IN) :: me onearg = 5 END FUNCTION onearg INTEGER FUNCTION twoarg1 (me, a) CLASS(t), INTENT(IN) :: me INTEGER, INTENT(IN) :: a twoarg1 = 42 END FUNCTION twoarg1 INTEGER FUNCTION twoarg2 (me, a) CLASS(t), INTENT(IN) :: me REAL, INTENT(IN) :: a twoarg2 = 123 END FUNCTION twoarg2 SUBROUTINE assign_proc (me, b) CLASS(t), INTENT(OUT) :: me LOGICAL, INTENT(IN) :: b me%x = .NOT. b END SUBROUTINE assign_proc END MODULE m