Oop Solaris/Oracle Fortran编译器的面向对象功能
我一直在尝试使用Oracle Solaris Studio 12.4套件的fortran编译器编译O-O fortran代码(据我所知的最新版本)。但是编译器崩溃了。这是我问题的简化版本 我定义了两个简单类型,每个类型都有一个类型绑定过程。其中一个过程具有另一种类型的变量作为伪参数:Oop Solaris/Oracle Fortran编译器的面向对象功能,oop,fortran,solaris-studio,Oop,Fortran,Solaris Studio,我一直在尝试使用Oracle Solaris Studio 12.4套件的fortran编译器编译O-O fortran代码(据我所知的最新版本)。但是编译器崩溃了。这是我问题的简化版本 我定义了两个简单类型,每个类型都有一个类型绑定过程。其中一个过程具有另一种类型的变量作为伪参数: MODULE MY_MODULE type type0 real :: value = 0 contains procedure :: print_value end
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
有人知道错误代码的意思吗(我还没有找到答案)?在向Oracle报告我的问题后,我刚刚得到了他们的答案: 感谢您的报告,并为问题感到抱歉。这是一个已知的问题。它已经在我们当前的开发中修复并移植到Studio 12.4。如果您有支持合同,您可以获得Studio 12.4补丁,否则下一个版本将包含修复程序
一般来说,“内部错误”意味着编译器有错误。这通常需要与供应商讨论。我可以确认我机器上的错误。使用gfortran,它编译并打印7。这是编译器中的一个bug,您必须向Oracle报告它。补丁可能只对付费客户可用。你可以试着找到解决办法。这不是F2003代码吗?那么,是什么让你认为你可以用F95编译器编译它呢?免责声明:我以前从未使用过Oracle的编译器。@NoseKnowsAll:嗯,f95基于fortran95标准,但它还包括许多200x功能/扩展。文档中特别指出:“Fortran 2003中对多态性的完全支持是可用的。”可能它不包括对类型绑定过程的完全支持。它正式支持它们,但它们有一个bug。再次阅读:
内部错误
。就这么简单,软件(编译器)中的一个bug。没什么新鲜事。报告并希望它被修复。它可能已被修复,但修补程序可能不可用。这取决于您是否向Oracle支付支持费用。