Fortran, Finalization at (1) еще не реализован

Я пытаюсь реализовать простой финализатор, но не могу получить даже этот пример для компиляции:

  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, или я что-то не так делаю?


person RDM    schedule 16.04.2014    source источник
comment
Я просто подумал посмотреть вики GCC, а финализаторы не реализованы до версии 4.9.   -  person RDM    schedule 17.04.2014
comment
Чтобы добавить к комментарию @RDM: если все пойдет хорошо, gcc 4.9 должен выпустить около 22 апреля.   -  person Stefan    schedule 17.04.2014
comment
Вы также можете использовать моментальные снимки разработки, релиз-кандидат RC0 уже доступен. Однако вы должны составить его самостоятельно.   -  person Vladimir F    schedule 17.04.2014


Ответы (1)


Начиная с gcc 4.9, финализаторы распознаются. Кроме того, если вы не реализуете их самостоятельно, компилятор сам сгенерирует финальный код.

Что, к сожалению, приводит к ошибке 59765. Все еще доступен в gcc gfortran 4.10, как мне не повезло обнаружить.

person Danny    schedule 17.01.2015