| ! { dg-do compile } |
| |
| ! Type-bound procedures |
| ! Test that the basic syntax for specific bindings is parsed and resolved. |
| |
| MODULE othermod |
| IMPLICIT NONE |
| |
| CONTAINS |
| |
| SUBROUTINE othersub () |
| IMPLICIT NONE |
| END SUBROUTINE othersub |
| |
| END MODULE othermod |
| |
| MODULE testmod |
| USE othermod |
| IMPLICIT NONE |
| |
| TYPE t1 |
| ! Might be empty |
| CONTAINS |
| PROCEDURE proc1 |
| PROCEDURE, PASS(me) :: p2 => proc2 |
| END TYPE t1 |
| |
| TYPE t2 |
| INTEGER :: x |
| CONTAINS |
| PRIVATE |
| PROCEDURE, NOPASS, PRIVATE :: othersub |
| PROCEDURE,NON_OVERRIDABLE,PUBLIC,PASS :: proc3 |
| END TYPE t2 |
| |
| TYPE t3 |
| CONTAINS |
| ! This might be empty for Fortran 2008 |
| END TYPE t3 |
| |
| TYPE t4 |
| CONTAINS |
| PRIVATE |
| ! Empty, too |
| END TYPE t4 |
| |
| CONTAINS |
| |
| SUBROUTINE proc1 (me) |
| IMPLICIT NONE |
| CLASS(t1) :: me |
| END SUBROUTINE proc1 |
| |
| REAL FUNCTION proc2 (x, me) |
| IMPLICIT NONE |
| REAL :: x |
| CLASS(t1) :: me |
| proc2 = x / 2 |
| END FUNCTION proc2 |
| |
| INTEGER FUNCTION proc3 (me) |
| IMPLICIT NONE |
| CLASS(t2) :: me |
| proc3 = 42 |
| END FUNCTION proc3 |
| |
| END MODULE testmod |