1! { dg-do compile } 2 3! Type-bound procedures 4! Check for errors with calls to GENERIC bindings and their module IO. 5! Calls with NOPASS. 6 7MODULE m 8 IMPLICIT NONE 9 10 TYPE supert 11 CONTAINS 12 PROCEDURE, NOPASS :: func_int 13 PROCEDURE, NOPASS :: sub_int 14 GENERIC :: func => func_int 15 GENERIC :: sub => sub_int 16 END TYPE supert 17 18 TYPE, EXTENDS(supert) :: t 19 CONTAINS 20 PROCEDURE, NOPASS :: func_real 21 GENERIC :: func => func_real 22 END TYPE t 23 24CONTAINS 25 26 INTEGER FUNCTION func_int (x) 27 IMPLICIT NONE 28 INTEGER :: x 29 func_int = x 30 END FUNCTION func_int 31 32 INTEGER FUNCTION func_real (x) 33 IMPLICIT NONE 34 REAL :: x 35 func_real = INT(x * 4.2) 36 END FUNCTION func_real 37 38 SUBROUTINE sub_int (x) 39 IMPLICIT NONE 40 INTEGER :: x 41 END SUBROUTINE sub_int 42 43END MODULE m 44 45PROGRAM main 46 USE m 47 IMPLICIT NONE 48 49 TYPE(t) :: myobj 50 51 ! These are ok. 52 CALL myobj%sub (1) 53 WRITE (*,*) myobj%func (1) 54 WRITE (*,*) myobj%func (2.5) 55 56 ! These are not. 57 CALL myobj%sub (2.5) ! { dg-error "no matching specific binding" } 58 WRITE (*,*) myobj%func ("hello") ! { dg-error "no matching specific binding" } 59 CALL myobj%func (2.5) ! { dg-error "SUBROUTINE" } 60 WRITE (*,*) myobj%sub (1) ! { dg-error "FUNCTION" } 61 62END PROGRAM main 63