Объектно-ориентированные функции с помощью компилятора Solaris/Oracle Fortran

Я пытался скомпилировать OO-фортран-код с помощью фортран-компилятора из пакета Oracle Solaris Studio 12.4 (насколько я знаю, самого последнего). Но компилятор падает. Вот упрощенная версия моей проблемы.

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

MODULE MY_MODULE

   type type0
      real :: value = 0 
   contains
      procedure :: print_value
   end type type0

   type type1
      real :: value = 0
   contains
      procedure :: print_diff
   end type type1

CONTAINS

   subroutine print_value(self)
      class(type0), intent(in) :: self
      print*, self%value 
   end subroutine print_value

   subroutine print_diff(self,var0)
      class(type1), intent(in) :: self
      type(type0), intent(in) :: var0
      print*,self%value - var0%value
   end subroutine print_diff

END MODULE MY_MODULE

PROGRAM MY_PROG

   use my_module, only: type0,type1
   type(type0) :: var0
   type(type1) :: var1

   var0%value = 3
   var1%value = 10

   call var1%print_diff(var0)

END PROGRAM MY_PROG

Эта программа компилируется и прекрасно работает с gfortran:

[> gfortran myprog.f03 -o myprog.x
[> ./myprog.x
        7.0

Однако компиляция с Solaris f95 вылетает:

[> f95 myprog.f03 -o myprog.x
   f90: Internal Error, code=fw-interface-ctyp1-796, last src=myprog.f03:4

Если я сделаю какое-либо дальнейшее упрощение исходного кода, то f95 успешно скомпилируется. Например, он отлично работает, если:

  • type0 не имеет связанной с типом процедуры
  • type1 не имеет связанной с типом процедуры
  • процедура print_diff заменяется подпрограммой без других аргументов, кроме self

Что-то я делаю не так? Есть ли проблема с установкой моего компилятора Solaris? Может ли кто-нибудь успешно скомпилировать этот код с другим компилятором Solaris? Кто-то знает, что означает код ошибки (я не смог выяснить это)?

1 ответ

После сообщения о моей проблеме в Oracle, я только что получил ответ:

Спасибо за сообщение об этом и извините за проблему. Это известная проблема. Это уже исправлено в нашей текущей разработке и перенесено в Studio 12.4. Если у вас есть контракт на поддержку, вы можете получить для него патч Studio 12.4, иначе в следующем выпуске будет исправление.

Другие вопросы по тегам