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);