単純なファイナライザーを実装しようとしていますが、この例でさえコンパイルできません:
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 に実装されていないということですか、それとも何か間違っていますか?