http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52968

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
         AssignedTo|unassigned at gcc dot       |janus at gcc dot gnu.org
                   |gnu.org                     |
            Summary|Call to type-bound          |[OOP] Call to type-bound
                   |procedure produces wrongly  |procedure produces wrongly
                   |rejected                    |rejected

--- Comment #2 from janus at gcc dot gnu.org 2012-04-13 13:32:00 UTC ---
(In reply to comment #1)
> Next, one tries to match "% Evaluate" as type-bound procedure:
> 
>   if (sym->f2k_derived)
>     tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
> 
> However, the class container does not have f2k_derived - only the "_data"
> component has.

Right. The class container's f2k_derived should be set up in
'gfc_build_class_symbol'. However, this is called before the type
'EquationTemplate' is available, and setting up the f2k_derived fails for this
reason.

Patch:

Index: gcc/fortran/class.c
===================================================================
--- gcc/fortran/class.c    (revision 186413)
+++ gcc/fortran/class.c    (working copy)
@@ -541,8 +541,7 @@ gfc_build_class_symbol (gfc_typespec *ts, symbol_a
       fclass->refs++;
       fclass->ts.type = BT_UNKNOWN;
       fclass->attr.abstract = ts->u.derived->attr.abstract;
-      if (ts->u.derived->f2k_derived)
-    fclass->f2k_derived = gfc_get_namespace (NULL, 0);
+      fclass->f2k_derived = gfc_get_namespace (NULL, 0);
       if (gfc_add_flavor (&fclass->attr, FL_DERIVED,
       NULL, &gfc_current_locus) == FAILURE)
     return FAILURE;


This makes the test case compile correctly (and is free of testsuite
regressions).

Reply via email to