Возможно, я обнаружил ошибку в GFortran 10.
Это минимальный пример:
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)
.
Инициализация как complex(8) :: x(4) = [1.d0,1.d0,1.d0,1.d0]
.
Операционная система и версия G CC:
Fedora 32.
Вывод gfortran --version
равен GNU Fortran (GCC) 10.0.1 20200328
.
Вы согласны, что это ошибка?