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