我认为我在gfortran-4.9和更高版本中发现了一个错误。当您有一个具有某些名称的模块(将其命名为init
)并且它使用具有别名子例程或具有相同名称(init
)的函数的模块时,就会发生这种情况-请参见下面的代码。
当我尝试使用较新版本的gfortran(在我的情况下为gfortran-5.3)编译旧代码时遇到了它。我尝试使用旧版本进行编译,结果发现这发生在gfortran-4.9中,而不是在gfortran-4.7中。然后,我还使用了gfortran的较新版本,而我可以获得的最新版本是8.1。该错误也发生在其中。
那么,我应该报告此错误吗?或者它甚至不是错误,而是我不知道的新的fortran标准的一部分?另外,如果这是一个bug,有人可以尝试使用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。自4.9起,该错误出现在所有版本的gfortran中。