MODULE m1 IMPLICIT NONE TYPE t INTEGER :: i CONTAINS FINAL :: t_final END TYPE t CONTAINS SUBROUTINE t_final(this) TYPE(t) :: this PRINT*,'In SUBROUTINE t_final' END SUBROUTINE FUNCTION new_t() TYPE(t) :: new_t new_t%i = 0 END FUNCTION new_t SUBROUTINE s TYPE(t) :: u u = new_t() END SUBROUTINE s END MODULE m1 PROGRAM prog USE m1 IMPLICIT NONE CALL s END PROGRAM prog