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