http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59414
--- Comment #2 from janus at gcc dot gnu.org --- This draft patch fixes the error (but has not been regtested yet): Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 205782) +++ gcc/fortran/resolve.c (working copy) @@ -2616,6 +2616,8 @@ found: expr->ts = sym->ts; expr->value.function.name = sym->name; expr->value.function.esym = sym; + if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as) + expr->rank = CLASS_DATA (sym)->as->rank; if (sym->as != NULL) expr->rank = sym->as->rank; With the patch the reduced test case in comment 1 compiles cleanly, but the full code in comment 0 then gives an ICE on a different location: ObjectLists.f90: In function ‘addarray’: ObjectLists.f90:240:0: internal compiler error: in gfc_conv_expr_descriptor, at fortran/trans-array.c:6473 allocate(Pt%P(1:SIZE(P)), source= P) ^ 0x636b4b gfc_conv_expr_descriptor(gfc_se*, gfc_expr*) /home/jweil/gcc49/trunk/gcc/fortran/trans-array.c:6473 0x65597e gfc_trans_pointer_assignment(gfc_expr*, gfc_expr*) /home/jweil/gcc49/trunk/gcc/fortran/trans-expr.c:6609 0x676cd1 gfc_trans_allocate(gfc_code*) /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:5124 0x6269c7 trans_code /home/jweil/gcc49/trunk/gcc/fortran/trans.c:1778 0x66df53 gfc_trans_if_1 /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:986 0x673d2a gfc_trans_if(gfc_code*) /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:1017 0x626aa7 trans_code /home/jweil/gcc49/trunk/gcc/fortran/trans.c:1720 0x674088 gfc_trans_block_construct(gfc_code*) /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:1344 0x626a37 trans_code /home/jweil/gcc49/trunk/gcc/fortran/trans.c:1728 0x66df53 gfc_trans_if_1 /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:986 0x673d2a gfc_trans_if(gfc_code*) /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:1017 0x626aa7 trans_code /home/jweil/gcc49/trunk/gcc/fortran/trans.c:1720 0x67585d gfc_trans_integer_select /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:1992 0x67585d gfc_trans_select(gfc_code*) /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:2486 0x626a47 trans_code /home/jweil/gcc49/trunk/gcc/fortran/trans.c:1744 0x674088 gfc_trans_block_construct(gfc_code*) /home/jweil/gcc49/trunk/gcc/fortran/trans-stmt.c:1344 0x626a37 trans_code /home/jweil/gcc49/trunk/gcc/fortran/trans.c:1728 0x646382 gfc_generate_function_code(gfc_namespace*) /home/jweil/gcc49/trunk/gcc/fortran/trans-decl.c:5604 0x627ed1 gfc_generate_module_code(gfc_namespace*) /home/jweil/gcc49/trunk/gcc/fortran/trans.c:1956 0x5da09b translate_all_program_units /home/jweil/gcc49/trunk/gcc/fortran/parse.c:4523