我一直在尝试使用 Oracle Solaris Studio 12.4 套件的 fortran 编译器(据我所知是最新的)编译 OO fortran 代码。但是编译器崩溃了。这是我的问题的简化版本。
我定义了两个简单类型,每个类型都有一个类型绑定过程。其中一个过程具有另一种类型的变量作为虚拟参数:
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 编译器成功编译此代码吗?有人知道错误代码是什么意思吗(我一直没能找到)?