【问题标题】:Can gfortran allocate with MOLD or not?gfortran 是否可以使用 MOLD 进行分配?
【发布时间】:2019-01-24 23:18:21
【问题描述】:

我正在尝试使用 gfortran 在 Mac 上编译相当现代的 fortran 代码。像这样的线条...

allocate(sce, mold=sct)

得到这样的错误:

Error: Array specification or array-valued SOURCE= expression required in ALLOCATE statement

看来,gfortran 理解 SOURCE 但不理解 MOLD。但是,我的 gfortran 是最近的:

 gcc version 8.2.0 (MacPorts gcc8 8.2.0_3)

我看到网页声称 gfortran 从版本 7.something 开始就能够支持MOLD。所以肯定它应该能够用 8.2.0 做到这一点。这不是真的吗? Mac版有什么好笑的吗?谁能提出其他问题可能是什么?

编辑:如果有人还在,这个玩具代码可以正常工作:

program awm

integer, dimension(:), allocatable :: sct,sce

integer :: nspec = 100

allocate(sct(nspec))
allocate(sce, mold=sct)

end program

但是当 sct 和 sce 是派生类型时,它就分崩离析了:

program awm

type :: r1d
    real, allocatable :: a(:)
end type

type(r1d), dimension(:), allocatable :: sct,sce

integer :: nspec = 100

allocate(sct(nspec))
do i = 1,nspec
  allocate(sct(i)%a(10))
enddo 
allocate(sce, mold=sct)

end program

这将返回我在上面遇到的错误。您可能会认为派生类型的定义有点奇怪,甚至是不必要的。好吧,从中获取的原始代码不是我的代码,我无法对其进行太多更改,实际上,由于我没有时间讨论的原因,这种结构确实有其用途。谢谢。

【问题讨论】:

  • 这不是关于 supooting 模具,而是关于缺少阵列规格。这是一个已知的错误,但现在应该修复gcc.gnu.org/bugzilla/show_bug.cgi?id=44672
  • 我写的测试程序或this related question 的测试程序都看不到问题(在Linux 上使用7.3)。因此,请提供一个完整的示例(可能是代码中存在问题)供我们进一步探索。 (然后添加标签 fortran 也是值得的。)
  • 您的代码(带有明显必要的扩展)在 GCC 6 和 7 中编译正常,它会在 GCC 5 中导致上述错误。在 Linux 上测试。
  • GCC 8 也可以编译。
  • @VladimirF 但是 AFAICT,我自己在这里有 GCC 8。那么,不知何故,我拥有的版本有什么问题/过时吗?您是否偶然在 Mac 上进行测试?谢谢。

标签: macos gfortran allocation


【解决方案1】:

我确信这是这个 GCC 错误 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80708 的副本,或者是非常密切相关的。你必须等待修复。我会将您的代码放在此错误的注释中,而不是打开一个新的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 2011-05-29
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2015-06-06
    • 2020-02-24
    相关资源
    最近更新 更多