Hi all, here is a small patch to fix a problem with class-array-valued functions, where the rank was not determined properly. Regtestes on x86_64-unknown-linux-gnu. Ok for trunk?
[Note: This patch only fixes the rejects-valid problem of comment 0/1, but not the ICE of comment 2/3, which is a completely separate issue.] Cheers, Janus 2013-12-07 Janus Weil <ja...@gcc.gnu.org> PR fortran/59414 * resolve.c (resolve_specific_f0): Handle CLASS-valued functions. 2013-12-07 Janus Weil <ja...@gcc.gnu.org> PR fortran/59414 * gfortran.dg/class_result_2.f90: New.
Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 205782) +++ gcc/fortran/resolve.c (working copy) @@ -2616,7 +2616,9 @@ found: expr->ts = sym->ts; expr->value.function.name = sym->name; expr->value.function.esym = sym; - if (sym->as != NULL) + if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as) + expr->rank = CLASS_DATA (sym)->as->rank; + else if (sym->as != NULL) expr->rank = sym->as->rank; return MATCH_YES;
! { dg-do compile } ! ! PR 59414: [OOP] Class array pointers: compile error on valid code (Different ranks in pointer assignment) ! ! Contributed by Antony Lewis <ant...@cosmologist.info> implicit none Type TObjectList end Type Class(TObjectList), pointer :: Arr(:) Arr => ArrayItem() contains function ArrayItem() result(P) Class(TObjectList), pointer :: P(:) end function end