我正在尝试使用 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
这将返回我在上面遇到的错误。您可能认为派生类型的定义有点奇怪,甚至是不必要的。好吧,从中获取的原始代码不是我的代码,我无法对其进行太多更改,实际上,由于我没有时间深入探讨,这种结构确实有其用途。谢谢。
最佳答案
我确信这是这个 GCC 错误的副本 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80708或者关系密切。你必须等待修复。我会把你的代码放在这个错误的评论中,而不是打开一个新的。
关于macos - gfortran 是否可以使用 MOLD 进行分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54356803/