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

--- Comment #7 from janus at gcc dot gnu.org 2010-12-14 18:30:48 UTC ---
(In reply to comment #6)
> I agree that this is better, though it still causes some regressions. I will
> now test the following variant:
> 
> Index: gcc/fortran/resolve.c
> ===================================================================
> --- gcc/fortran/resolve.c       (revision 167790)
> +++ gcc/fortran/resolve.c       (working copy)
> @@ -11784,7 +11784,7 @@ resolve_symbol (gfc_symbol *sym)
>        for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
>         {
>           symtree = gfc_find_symtree (ns->sym_root, sym->name);
> -         if (symtree && symtree->n.sym->generic)
> +         if (symtree && symtree->n.sym->attr.flavor == FL_PROCEDURE)
>             {
>               this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
>                                                sym->name);


Unfortunately this also triggers a few regressions, but the following regtests
cleanly:

Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c       (revision 167790)
+++ gcc/fortran/resolve.c       (working copy)
@@ -11784,7 +11784,9 @@ resolve_symbol (gfc_symbol *sym)
       for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
        {
          symtree = gfc_find_symtree (ns->sym_root, sym->name);
-         if (symtree && symtree->n.sym->generic)
+         if (symtree && (symtree->n.sym->generic ||
+                         (symtree->n.sym->attr.flavor == FL_PROCEDURE
+                          && sym->ns->construct_entities)))
            {
              this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
                                               sym->name);

Reply via email to