Я думаю, что нашел ошибку в gfortran-4.9 и новее.Это происходит, когда у вас есть модуль с некоторым именем (давайте назовем его init
), и он использует модуль с псевдонимом подпрограммы или функцию с тем же именем (init
) - см. Код ниже.
Я столкнулся с этим при попытке скомпилировать мой старый код с более новой версией gfortran (gfortran-5.3 в моем случае).Я попытался скомпилировать более старые версии и обнаружил, что это происходит в gfortran-4.9, но не в gfortran-4.7.Затем я также использовал более новые версии gfortran, и самая новая версия, которую я мог получить, была 8.1.В этом тоже происходит ошибка.
Итак, я должен сообщить об этой ошибке?Или это даже не ошибка, а часть нового стандарта Фортрана, которого я не знаю?Кроме того, если это ошибка, может кто-нибудь попытаться скомпилировать приведенный ниже код, используя gfortran-9, чтобы проверить, есть ли он там.
Код, который воспроизводит ошибку:
!------the part below could be the contents of another file -----
module mod
implicit none
contains
subroutine init
write(*,*) "Hello!"
end subroutine init
end module mod
module test_mod
use mod, only : test_init => init
end module test_mod
!-----------------------------------------------------
module init ! the name of the module (init) is the same as the name of
! aliased subroutine in used module (test_mod)
use test_mod
implicit none
contains
subroutine test_sub
call test_init
end subroutine test_sub
end module init
program test
use init
implicit none
call test_sub
end program test
РЕДАКТИРОВАТЬ: Когда я компилирую этот код на версии gfortran с 4.9 до 8.1, я получаю следующее сообщение об ошибке
call test_init
internal compiler error: in conv_function_val, at fortran/trans-expr.c:3792
Please submit a full bug report,
with preprocessed source if appropriate.
See file:///usr/share/doc/gcc-8/README.Bugs for instructions.
EDIT2: ссылка на сообщение об ошибке: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89574. Ошибка появляется во всех версиях gfortran, так как4.9.