Fortran 使用抽象接口和声明的参数化类型时发生灾难性错误
有人能告诉我为什么这不起作用吗 我可以告诉您触发错误的是Fortran 使用抽象接口和声明的参数化类型时发生灾难性错误,fortran,intel-fortran,Fortran,Intel Fortran,有人能告诉我为什么这不起作用吗 我可以告诉您触发错误的是type(ty1(t_size=ts)),intent(inout)::dat1 如果我将ts声明为一个参数,它会工作,但它似乎不接受另一种方式,即它是动态的 提前感谢您所说的“灾难性”是指(英特尔?)编译器是这么说的吗?请把全部信息放在问题中。参数化的派生类型对于编译器供应商来说尤其难以获得正确的结果。像这里一样,支持自动PDT是一件棘手的事情。如果这确实是一个内部编译器错误,那么除了报告;使用更高版本;试着编写代码,在不碰到bug的情况
type(ty1(t_size=ts)),intent(inout)::dat1
如果我将ts声明为一个参数,它会工作,但它似乎不接受另一种方式,即它是动态的
提前感谢您所说的“灾难性”是指(英特尔?)编译器是这么说的吗?请把全部信息放在问题中。参数化的派生类型对于编译器供应商来说尤其难以获得正确的结果。像这里一样,支持自动PDT是一件棘手的事情。如果这确实是一个内部编译器错误,那么除了报告;使用更高版本;试着编写代码,在不碰到bug的情况下做你想做的事情;请使用其他编译器。同时请提供您的编译器版本。这段代码为我使用17.0和18.0进行编译。很抱歉,我使用的是15.0-这可能是非常旧的原因,您必须更新。
module test2
implicit none
integer :: ts
end module test2
module test1
implicit none
type :: ty2(t_size )
integer, len :: t_size
real :: x(t_size )
end type
type :: ty1(t_size )
integer, len :: t_size
real :: x(t_size )
end type
abstract interface
subroutine dummy( dat1 )
use test2
import ty1
implicit none
type(ty1(t_size=ts)), intent(inout) :: dat1
end subroutine
end interface
end module
program test
use test2
ts = 10
end program