2

単純なファイナライザーを実装しようとしていますが、この例でさえコンパイルできません:

  MODULE m
   TYPE :: t1
    REAL a,b
   END TYPE
   TYPE, EXTENDS(t1) :: t2
    REAL,POINTER :: c(:),d(:)
    CONTAINS
    FINAL :: t2f
   END TYPE
   TYPE, EXTENDS(t2) :: t3
    REAL,POINTER :: e
    CONTAINS
    FINAL :: t3f
   END TYPE

   CONTAINS
   SUBROUTINE t2f(x) ! Finalizer for TYPE(t2)'s extra components
    TYPE(t2) :: x

    print *, 'entering t2f'  
    IF (ASSOCIATED(x%c)) then
     print *, ' c allocated, cleaning up'
     DEALLOCATE(x%c)
    end if 
    IF (ASSOCIATED(x%d)) then 
     print *, ' d allocated, cleaning up'
     DEALLOCATE(x%d)
    end if  
   END SUBROUTINE
   SUBROUTINE t3f(y) ! Finalizer for TYPE(t3)'s extra components
    TYPE(t3) :: y

    print *, 'entering t3f'
    IF (ASSOCIATED(y%e)) then
      print *, ' e allocated, cleanup up'
      DEALLOCATE(y%e)
    end if 
   END SUBROUTINE
END MODULE

GNU Fortran (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7) を使用すると、次のエラー出力が表示されます。

$ gfortran -c m_example.f03 m_example.f03:5.26:

TYPE, EXTENDS(t1) :: t2 1 エラー: (1) でのファイナライズはまだ実装されていません m_example.f03:10.26:

TYPE, EXTENDS(t2) :: t3 1 エラー: (1) でのファイナライズはまだ実装されていません

これはバグですか、ファイナライザーがまだ gfortran に実装されていないということですか、それとも何か間違っていますか?

4

1 に答える 1