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

Reply via email to