https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61337
Bug ID: 61337 Summary: Wrong indexing and runtime crash with unlimited polymorphic array. Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: vladimir.fuka at gmail dot com module array_list type container class(*), allocatable :: items(:) end type contains subroutine add_item(a, e) type(container),allocatable,intent(inout) :: a(:) class(*),intent(in) :: e(:) type(container),allocatable :: tmp(:) if (.not.allocated(a)) then allocate(a(1)) allocate(a(1)%items(size(e)), source = e) else call move_alloc(a,tmp) allocate(a(size(tmp)+1)) a(1:size(tmp)) = tmp allocate(a(size(tmp)+1)%items(size(e)), source = e) end if end subroutine end module use array_list type(container), allocatable :: a_list(:) call add_item(a_list, [1, 2]) call print(a_list(1)) contains subroutine print(c) type(container), intent(in) :: c if (allocated(c%items)) then select type (x=>c%items) type is (integer) print *, x end select end if end subroutine end > gfortran-4.9 alist-bug.f90 -fcheck=all -g -fbacktrace > ./a.out 2 0 Expected: 1 2 With call add_item(a_list, [1, 2]) call add_item(a_list, [1, 2]) do i = 1, size(a_list) call print(a_list(i)) end do it crashes SIGSEGVs on line: allocate(a(size(tmp)+1)%items(size(e)), source = e) Tested and works on Solaris Studio 12.4. > sunf90 alist-bug.f90 > ./a.out 1 2 1 2