http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53653
Bug #: 53653 Summary: [IR Tracking] Disallow abstract/unlimited-polymorphic types in array constructors Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Keywords: accepts-invalid, ice-on-invalid-code Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: bur...@gcc.gnu.org See thread started at http://j3-fortran.org/pipermail/j3/2012-June/005332.html - and note that there is no IR yet. Suggested change: C4106 (R472) An <ac-value> shall not be unlimited polymorphic or of an abstract type. The following program gives currently an ICE: test.f90:28:0: internal compiler error: in gfc_conv_array_constructor_expr, at fortran/trans-expr.c:4932 allocate(y(1), source=[x]) ^ module m abstract interface integer function afoo() end function end interface type, abstract :: abstract_base integer i contains procedure(afoo), nopass, deferred :: foo end type type, extends(abstract_base) :: child integer j contains procedure, nopass :: foo => foo_child end type contains integer function foo_child() foo_child = 1 end function end module use m implicit none class(abstract_base), allocatable :: x, y(:) allocate(x, source=child(1,2)) allocate(y(1), source=[x]) select type(y) type is (child) print *, y class is (abstract_base) print *, y(1)%i end select print *, y(1)%foo() end