| ! { dg-do compile } |
| |
| ! Type-bound procedures |
| ! Check for errors with calls to GENERIC bindings and their module IO. |
| ! Calls with NOPASS. |
| |
| MODULE m |
| IMPLICIT NONE |
| |
| TYPE supert |
| CONTAINS |
| PROCEDURE, NOPASS :: func_int |
| PROCEDURE, NOPASS :: sub_int |
| GENERIC :: func => func_int |
| GENERIC :: sub => sub_int |
| END TYPE supert |
| |
| TYPE, EXTENDS(supert) :: t |
| CONTAINS |
| PROCEDURE, NOPASS :: func_real |
| GENERIC :: func => func_real |
| END TYPE t |
| |
| CONTAINS |
| |
| INTEGER FUNCTION func_int (x) |
| IMPLICIT NONE |
| INTEGER :: x |
| func_int = x |
| END FUNCTION func_int |
| |
| INTEGER FUNCTION func_real (x) |
| IMPLICIT NONE |
| REAL :: x |
| func_real = INT(x * 4.2) |
| END FUNCTION func_real |
| |
| SUBROUTINE sub_int (x) |
| IMPLICIT NONE |
| INTEGER :: x |
| END SUBROUTINE sub_int |
| |
| END MODULE m |
| |
| PROGRAM main |
| USE m |
| IMPLICIT NONE |
| |
| TYPE(t) :: myobj |
| |
| ! These are ok. |
| CALL myobj%sub (1) |
| WRITE (*,*) myobj%func (1) |
| WRITE (*,*) myobj%func (2.5) |
| |
| ! These are not. |
| CALL myobj%sub (2.5) ! { dg-error "no matching specific binding" } |
| WRITE (*,*) myobj%func ("hello") ! { dg-error "no matching specific binding" } |
| CALL myobj%func (2.5) ! { dg-error "SUBROUTINE" } |
| WRITE (*,*) myobj%sub (1) ! { dg-error "FUNCTION" } |
| |
| END PROGRAM main |