http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50981
--- Comment #25 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2012-01-20 15:54:14 UTC --- On x86_64-apple-darwin10, the patch in comments #22 breaks most of the tests I have for extends_type_of (3 out of 5) and in the test suite (only gfortran.dg/extends_type_of_2.f03 passes the two other tests gfortran.dg/extends_type_of_(1.f03|3.f90) fails): Program received signal SIGSEGV: Segmentation fault - invalid memory reference. I have also another test without extends_type_of which fails: [macbook] f90/bug% cat oop_14.f90 module realloc implicit none type :: base_type integer :: i =2 contains procedure :: assign generic :: assignment(=) => assign ! define generic assignment end type base_type type, extends(base_type) :: extended_type integer :: j =3 end type extended_type contains elemental subroutine assign (a, b) class(base_type), intent(out) :: a class(base_type), intent(in) :: b a%i = b%i end subroutine assign subroutine reallocate (a) class(base_type), dimension(:), allocatable, intent(inout) :: a class(base_type), dimension(:), allocatable :: tmp allocate (tmp (2 * size (a))) ! how to alloc b with same type as a ? ! This is one way how! ! select type (a) ! type is (base_type); allocate (base_type :: tmp (2 * size (a))) ! type is (extended_type); allocate (extended_type :: tmp (2 * size (a))) ! end select call print_type ("tmp", tmp) tmp(:size(a)) = a ! polymorphic l.h.s. ! call move_alloc (from=tmp, to=a) ! remains to be sorted out end subroutine reallocate subroutine print_type (name, a) character(*), intent(in) :: name class(base_type), dimension(:), intent(in) :: a select type (a) type is (base_type); print *, name // " is base_type", a type is (extended_type); print *, name // " is extended_type", a end select end subroutine print_type end module realloc program main use realloc implicit none class(base_type), dimension(:), allocatable :: a ! allocate (a(10), source = extended_type(1,2)) ! this works allocate (extended_type::a(10)) call print_type ("a", a) call reallocate (a) call print_type ("a", a) end program main [macbook] f90/bug% gfc oop_14.f90 [macbook] f90/bug% a.out a is extended_type 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 Program received signal SIGSEGV: Segmentation fault - invalid memory reference.