https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81093

--- Comment #2 from janus at gcc dot gnu.org ---
Confirmed. Slightly reduced test case:


program test

  implicit none

  type data_type1
    integer, dimension(2) :: data1 = (/1,2/)
  end type

  type, extends(data_type1) :: data_type2
    integer, dimension(2) :: data2 = -1
  end type

  type data_gen
    class(data_type1), dimension(:), allocatable :: mydata
  end type

  type(data_gen) :: gen_data

  allocate(data_type2::gen_data%mydata(2))

  ! wrong result
  write(*,*) gen_data%mydata(:)%data1(1), gen_data%mydata(:)%data1(2)

  ! correct result
  select type(data => gen_data%mydata)
  type is (data_type2)
    write(*,*) data(:)%data1(1), data(:)%data1(2)
  end select

end program test


It ICEs with gfortran 4.7 and shows the same (wrong) output with all later
versions:

           1          -1           2          -1
           1           1           2           2

The second line is right, the first is wrong (should be equal to the second).

Reply via email to