Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop Solaris/Oracle Fortran编译器的面向对象功能_Oop_Fortran_Solaris Studio - Fatal编程技术网

Oop Solaris/Oracle 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

我一直在尝试使用Oracle Solaris Studio 12.4套件的fortran编译器编译O-O 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编译器成功编译此代码?
有人知道错误代码的意思吗(我还没有找到答案)?

在向Oracle报告我的问题后,我刚刚得到了他们的答案:

感谢您的报告,并为问题感到抱歉。这是一个已知的问题。它已经在我们当前的开发中修复并移植到Studio 12.4。如果您有支持合同,您可以获得Studio 12.4补丁,否则下一个版本将包含修复程序


一般来说,“内部错误”意味着编译器有错误。这通常需要与供应商讨论。我可以确认我机器上的错误。使用gfortran,它编译并打印7。这是编译器中的一个bug,您必须向Oracle报告它。补丁可能只对付费客户可用。你可以试着找到解决办法。这不是F2003代码吗?那么,是什么让你认为你可以用F95编译器编译它呢?免责声明:我以前从未使用过Oracle的编译器。@NoseKnowsAll:嗯,f95基于fortran95标准,但它还包括许多200x功能/扩展。文档中特别指出:“Fortran 2003中对多态性的完全支持是可用的。”可能它不包括对类型绑定过程的完全支持。它正式支持它们,但它们有一个bug。再次阅读:
内部错误
。就这么简单,软件(编译器)中的一个bug。没什么新鲜事。报告并希望它被修复。它可能已被修复,但修补程序可能不可用。这取决于您是否向Oracle支付支持费用。