You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gfortran中associate与forall联用的版本兼容及标准合规性问询

Fortran中forall与associate联用的编译器支持及标准合规性问题

问题场景

我尝试用两个不同版本的gfortran编译以下Fortran程序:

program main

    integer, dimension(1:2) :: iii
    real, dimension(1:4,1:4,1:2) :: myArray
    
    associate(iix => iii(1), iiy=> iii(2) )
    forall( iix=1:4, iiy=1:4 )
        myArray(iix,iiy,1) = iix + iiy
        myArray(iix,iiy,2) = (iix + iiy)*10
    endforall
    end associate

    print *, myArray(:,:,1)
    print *, myArray(:,:,2)
    
end program main
  • 使用**GNU Fortran (GCC) 12.1.1 20220507 (Red Hat 12.1.1-1)**编译无任何问题;
  • 使用GNU Fortran (Debian 10.2.1-6) 10.2.1 20210110编译时触发内部编译器错误:
7 |  forall( iix=1:4, iiy=1:4 )
  |                           1 internal compiler error: Segmentation fault

我有两个核心疑问:

  1. 从哪个gfortran版本开始支持在forall语句中使用associate关联的名称?
  2. 这段程序是否符合Fortran标准?

替代可行方案

将forall替换为嵌套do循环后,两个版本的编译器都能正常编译运行,代码如下:

integer, dimension(1:2) :: iii
real, dimension(1:4,1:4,1:2) :: myArray

    associate(iix => iii(1), iiy=> iii(2) )
    do iix = 1,4
        do iiy = 1,4
            myArray(iix,iiy,1) = iix + iiy
            myArray(iix,iiy,2) = (iix + iiy)*10
        enddo
    enddo
    end associate

    print *, myArray(:,:,1)
    print *, myArray(:,:,2)
    
end program main

补充完整代码

根据后续补充,初始代码中associate与forall之间还有一层do循环,完整代码如下:

program main

integer, dimension(1:2) :: iii
real, dimension(1:4,1:4,1:2) :: myArray
integer :: i

myArray = 0.0

associate( iix => iii(1), iiy => iii(2) )
do i=1,2
    forall( iix=1:4, iiy=1:4 )
        myArray(iix,iiy,i) = (iix+iiy)*10*i
    endforall
enddo
end associate

print *, myArray(:,:,1)
print *, myArray(:,:,2)

end program main

解答

1. 程序的标准合规性

这段代码完全符合Fortran标准。associate块的关联名称可以被forall语句的索引变量覆盖,因为forall的索引变量是该语句的局部变量,作用域仅限forall内部,不会与associate的关联名称产生冲突,这是Fortran标准允许的用法。

2. gfortran版本支持情况

你遇到的是gfortran 10.x版本的内部编译器错误(ICE),这是编译器自身的bug,而非代码不符合标准。该bug在gfortran 11版本中已被修复,因此从gfortran 11开始,能够正常编译这类associate与forall联用的代码。


内容的提问来源于stack exchange,提问作者Stef1611

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:57:53