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

Reply via email to