Solaris / Oracle Fortran编译器的面向对象功能

时间:2015-11-24 09:38:54

标签: 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 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 个答案:

答案 0 :(得分:0)

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

  

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