我正在尝试用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开始就可以支持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这将返回我在上面遇到的错误。您可能认为派生类型的定义有些奇怪,甚至是不必要的。好吧,原始代码并不是我的代码,我也不能对它做太多的修改,实际上,这种结构化确实有它的用处,因为我没有时间深入讨论。谢谢。
发布于 2019-01-25 23:32:32
我确信这是这个GCC漏洞https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80708的复制品,或者是非常密切的联系。你必须等待一个解决方案。我会把你的代码放在这个bug的注释中,而不是打开一个新的。
https://stackoverflow.com/questions/54356803
复制相似问题