这是GFortran 10中的错误吗?
我可能在GFortran 10中发现了一个bug 这是一个简单的例子:这是GFortran 10中的错误吗?,fortran,gfortran,Fortran,Gfortran,我可能在GFortran 10中发现了一个bug 这是一个简单的例子: program main complex(8) :: x(4) x = 1.d0 call print_first_element( x(4:1:-1)*x(1:4) ) contains subroutine print_first_element (array) complex(8), intent(in) :: array(:) print*, array(1)
program main
complex(8) :: x(4)
x = 1.d0
call print_first_element( x(4:1:-1)*x(1:4) )
contains
subroutine print_first_element (array)
complex(8), intent(in) :: array(:)
print*, array(1)
end
end
使用gfortran-O3 main.f90编译并执行
(0.0000000000000000,0.0000000000000000)
而我会期待结果
(1.0000000000000000,0.0000000000000000)
奇怪的是,它在以下任何情况下都能正常工作:
将优化标志从-O3
更改为
-O2
、-O1
或-O0
中的任何一种
使用real(8)
或integer
代替complex(8)
初始化为复合体(8)::x(4)=[1.d0,1.d0,1.d0,1.d0]
操作系统和GCC版本:
软呢帽32
gfortran--version
的输出为
GNU Fortran(GCC)10.0.1 20200328
您同意这是一个bug吗?对于“10.0.1 20200418”,我明白您的期望。我通过gfortran 6.5.0、7.5.0、8.3.1、9.2.1和10.0.0(20200111)获得了预期的输出。如果它是一个bug,那么它在代码库中相对较新。也许,你应该让gfortran开发人员参与进来,因为大多数(如果不是全部的话)gfortran开发人员很少阅读stackoverflow。在我看来:从francescalus的评论中看到的版本和问题中指定的版本,问题似乎同时得到了解决,但是用gfortran的最新快照来测试它并没有什么坏处。我确认在GNU Fortran(GCC)10.2.1 20200723上我也得到了预期的结果。然后,它是该版本的一个bug。通过“10.0.1 20200418”,我看到了您的期望。通过gfortran 6.5.0、7.5.0、8.3.1、9.2.1和10.0.0(20200111),我得到了预期的输出。如果它是一个bug,那么它在代码库中相对较新。也许,你应该让gfortran开发人员参与进来,因为大多数(如果不是全部的话)gfortran开发人员很少阅读stackoverflow。在我看来:从francescalus的评论中看到的版本和问题中指定的版本,问题似乎同时得到了解决,但是用gfortran的最新快照来测试它并没有什么坏处。我确认在GNU Fortran(GCC)10.2.1 20200723上我也得到了预期的结果。然后,这是一个错误的版本。