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

Reply via email to