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
相关产品推荐
相关产品推荐

