【问题标题】:object oriented features with Solaris/Oracle Fortran compiler具有 Solaris/Oracle Fortran 编译器的面向对象特性
【发布时间】:2015-11-24 09:38:54
【问题描述】:

我一直在尝试使用 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 没有类型绑定过程
  • procedure print_diff 被替换为除self 之外没有其他参数的子例程

我做错了什么吗? 我的 Solaris 编译器是否存在安装问题?有人能够使用其他 Solaris 编译器成功编译此代码吗? 有人知道错误代码是什么意思吗(我一直没能找到)?

【问题讨论】:

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

标签: oop fortran solaris-studio


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2012-08-25
    • 2010-12-04
    • 1970-01-01
    相关资源
    最近更新 更多