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

Intel Fortran编译器(ifort/ifx)数组尺寸输出异常是否为Bug?

这确实是Intel Fortran编译器(ifort/ifx)的Bug

问题复现与现象

使用Intel Fortran编译器的以下版本编译示例代码时会出现异常:

  • ifort 2021.10.0
  • ifx 2023.2.0

编译命令:

ifort minimal_example.f90
# 或
ifx minimal_example.f90

示例代码(minimal_example.f90):

subroutine f(n)
    implicit none
    integer,  intent(in) :: n
    real :: x(n)
    real :: y(n)
    real :: z(n)
    call g(z, y)

contains
    
    subroutine g(z, y)
        real, intent(in)  :: z(size(x))
        real, intent(out) :: y(n)
        print*, 'n       = ', n
        print*, 'size(y) = ', size(y)
    end subroutine
    
end subroutine
        

program minimal_example
    implicit none
    external f
    call f(8)
end program

输出对比

  • Intel编译器输出:
n       =            8
 size(y) =            0
  • GFortran输出(符合预期):
n       =            8
 size(y) =            8

合规性分析

根据Fortran标准,内部子程序g通过宿主关联可以访问宿主子程序f中的所有实体(包括x和n)。在g的形参声明中:

  • z(size(x))是合法写法,通过宿主数组x的大小指定z的维度;
  • y(n)直接使用宿主的整型变量n指定维度,两者语义完全等价,都应解析为8。

Intel编译器在处理z(size(x))后,错误地导致y(n)的维度推导失效,将y的大小设为0,这明显违反了Fortran标准的规范,属于编译器实现缺陷。

当把size(x)替换为n时,编译器能正确推导y的维度,进一步验证了这是编译器的特定场景Bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:52:34