https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77385
--- Comment #3 from Paul Thomas <pault at gcc dot gnu.org> --- (In reply to Dominique d'Humieres from comment #1) > Confirmed from 4.7 up to trunk (7.0), Polymorphic arrays are not yet > supported on 4.6. > > Note that the following variant > > MODULE a > IMPLICIT NONE > TYPE :: b > CONTAINS > PROCEDURE :: e > END TYPE b > TYPE :: c > CLASS(b), POINTER :: i(:) => NULL() > END TYPE c > CONTAINS > FUNCTION e(this ) RESULT (s) > CLASS(b) :: this > TYPE(b) :: s > s = b() > END FUNCTION e > END MODULE a > MODULE m > USE a > IMPLICIT NONE > TYPE d > CLASS(b), DIMENSION(:), POINTER :: f => NULL() > END TYPE d > CONTAINS > FUNCTION g() RESULT (h) > TYPE(d) :: j > TYPE(c) :: h > allocate(j%f(1)) > print *, shape(j%f) > ASSOCIATE( k => j%f ) > END ASSOCIATE > END FUNCTION g > END MODULE m > use m > type(c) :: res > res = g() > end > > gives > > ASSOCIATE( k => j%f ) > > internal compiler error: Segmentation fault: 11 > > and > > MODULE a > IMPLICIT NONE > TYPE :: b > CONTAINS > PROCEDURE :: e > END TYPE b > TYPE :: c > CLASS(b), POINTER :: i(:) => NULL() > END TYPE c > CONTAINS > FUNCTION e(this ) RESULT (s) > CLASS(b) :: this > TYPE(b) :: s > s = b() > END FUNCTION e > END MODULE a > MODULE m > USE a > IMPLICIT NONE > TYPE d > CLASS(b), DIMENSION(:), POINTER :: f => NULL() > END TYPE d > CONTAINS > FUNCTION g() RESULT (h) > TYPE(d) :: j > TYPE(c) :: h > ALLOCATE(h%i(1)) > allocate(j%f(1)) > SELECT TYPE ( l => h%i ) > TYPE IS ( b ) > l(1) = j*f(1)%e() > END SELECT > END FUNCTION g > END MODULE m > > gives > > l(1) = j*f(1)%e() > 1 > Error: Symbol 'f' at (1) has no IMPLICIT type I am not surprised at the error in the second variant. Replace the offending statement by l(1) = j%f(1)%e() and all is well. Paul