http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59198
Bug ID: 59198 Summary: ICE on cyclically dependent polymorphic types Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: juergen.reuter at desy dot de Created attachment 31254 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31254&action=edit Code triggering the ICE Triggers ICE with gfortran 4.9.0 v204344. It compiles with gfortran 4.6.3 (but in our setup produces seg faults in the final code), ICE is present in 4.6.4, 4.7.3, 4.8.1. This is the code O(60) lines, also attached: module decays abstract interface function obs_unary_int () end function obs_unary_int end interface type, abstract :: any_config_t contains procedure (any_config_final), deferred :: final end type any_config_t type :: decay_term_t type(unstable_t), dimension(:), pointer :: unstable_product => null () end type decay_term_t type, abstract :: decay_gen_t type(decay_term_t), dimension(:), allocatable :: term procedure(obs_unary_int), nopass, pointer :: obs1_int => null () end type decay_gen_t type, extends (decay_gen_t) :: decay_root_t contains procedure :: final => decay_root_final end type decay_root_t type, abstract :: rng_t end type rng_t type, extends (decay_gen_t) :: decay_t class(rng_t), allocatable :: rng contains procedure :: final => decay_final end type decay_t type, extends (any_config_t) :: unstable_config_t contains procedure :: final => unstable_config_final end type unstable_config_t type :: unstable_t type(unstable_config_t), pointer :: config => null () type(decay_t), dimension(:), allocatable :: decay end type unstable_t interface subroutine any_config_final (object) import class(any_config_t), intent(inout) :: object end subroutine any_config_final end interface contains subroutine decay_root_final (object) class(decay_root_t), intent(inout) :: object end subroutine decay_root_final recursive subroutine decay_final (object) class(decay_t), intent(inout) :: object end subroutine decay_final recursive subroutine unstable_config_final (object) class(unstable_config_t), intent(inout) :: object end subroutine unstable_config_final end module decays