以下
 type t
   real :: r(2)
 end type t
 class(t), allocatable :: array(:)
 allocate(array(1))
 array(1)%r(1) = 1
 array(1)%r(2) = 2
 print*,array(1)%r
end program
打印不正确
1.00000000       0.00000000    
使用 gfortran-4.8.1。无论数组大小如何,我都只能正确设置第一个元素。所有其他分配均无效。没有给出警告。这是编译器错误吗?使用英特尔编译器,它可以正确打印
1.000000       2.000000    
编辑
抱歉,上述内容虽然可能是编译器错误,但却是对我的实际问题的过度简化。实际上,我有一个可分配数组,其元素继承自抽象类型。
module m
  type, abstract :: base
     real, allocatable :: r(:)
   contains
     procedure :: print
  end type base
  type, extends(base) :: t
  end type t
contains
  subroutine print(this, n)
    class(base) :: this
    integer n
    print*,this%r(n)
  end subroutine print
end module m
program test
  use m
  class(base), allocatable :: array(:)
  type(t) :: f
  allocate(array(1), mold=f)
  allocate(array(1)%r(2))
  array(1)%r(1) = 1.0
  array(1)%r(2) = 2.0
  call array(1)%print(1)
  call array(1)%print(2)
end program test
结果是
   1.00000000    
   0.00000000    
使用 gfortran 但应该是
   1.00000000    
   2.00000000    
与 ifort 一样。使用 base-bound 集合函数,而不是直接定义 'r',会产生正确的结果。上面的代码中有什么不标准的或者只是一个编译器错误?
更新
这个问题现在似乎已经解决了。引入修复程序时我不这样做,但是使用 GFortran 10.2.0 我得到了正确的行为。