在声明的类型内分配参数声明的类型时,ifort发生灾难性错误

时间:2019-01-24 20:25:01

标签: fortran intel-fortran

请考虑以下代码

  module t_test
     implicit none

     type ttt(tsize)
        integer, len :: tsize
        real x(tsize)
     end type ttt



  type :: t_rndom_diameter(t_rsize,t_csize)
      integer, len :: t_rsize,t_csize
      real :: x(t_rsize,t_csize)
     type(ttt(tsize=:)), allocatable :: test_type
  end type t_rndom_diameter




  end module t_test


  program p_test
  USE t_test
  implicit none

  type(t_rndom_diameter(t_rsize=3,t_csize=3)) :: gdad

  allocate(gdad% ttt(tsize=10) ::  gdad % test_type)


  end program

它给我带来了灾难性的错误,而没有提及错误是什么:

catastrophic error: **Internal compiler error: segmentation violation signal raised** Please
report this error along with the circumstances in which it occurred in a Software Problem
Report.  Note: File and line given may not be explicit cause of this error.

但是,我知道是什么触发了此错误,即:allocate(gdad% ttt(tsize=10) :: gdad% test_type)

这是什么意思?

我也尝试了没有gdad,即allocate(gdad% ttt(tsize=10) :: test_type)

1 个答案:

答案 0 :(得分:1)

通常,“内部编译器错误”与编译器中的错误有关。这是要报告给编译器供应商的东西。

但是,在这种情况下,这将是一个低优先级的问题:您尝试编译的代码无效。如前所述,问题线是

allocate(gdad% ttt(tsize=10) ::  gdad % test_type)

这是无效的,因为这种形式的allocate语句在左侧需要类型说明符。 gdad%ttt(10)并非如此。正确的说法是

allocate(ttt(tsize=10) ::  gdad % test_type)