Объектно-ориентированные функции с помощью компилятора 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, иначе в следующем выпуске будет исправление.