这是GFortran 10中的错误吗?

这是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)

我可能在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)

  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上我也得到了预期的结果。然后,这是一个错误的版本。