aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2009-01-03 17:47:20 +0000
committerPaul Thomas <pault@gcc.gnu.org>2009-01-03 17:47:20 +0000
commit79b1d36cdde2ef1c586ada2b58f5b2d1441dd82f (patch)
treeeec8656e222be9daf737566c62d8865eb03a690c /gcc/fortran/resolve.c
parent493aa551b29a64091d07e3a0736b5cd3b84e94a4 (diff)
downloadgcc-79b1d36cdde2ef1c586ada2b58f5b2d1441dd82f.zip
gcc-79b1d36cdde2ef1c586ada2b58f5b2d1441dd82f.tar.gz
gcc-79b1d36cdde2ef1c586ada2b58f5b2d1441dd82f.tar.bz2
re PR fortran/38594 (module function name mangled improperly if contained function of same name exists)
2009-01-03 Paul Thomas <pault@gcc.gnu.org> PR fortran/38594 * resolve.c (resolve_call): When searching for proper host association, use symtree rather than symbol. For everything except generic subroutines, substitute the symtree in the call rather than the symbol. 2009-01-03 Paul Thomas <pault@gcc.gnu.org> PR fortran/38594 * gfortran.dg/host_assoc_call_3.f90: Make sure that the generic interface still works, in addition to original tests. * gfortran.dg/host_assoc_call_6.f90: New test. From-SVN: r143032
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 0b6fe4c..18a81e9 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2944,15 +2944,20 @@ resolve_call (gfc_code *c)
if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
{
- gfc_find_symbol (csym->name, gfc_current_ns, 1, &sym);
+ gfc_symtree *st;
+ gfc_find_sym_tree (csym->name, gfc_current_ns, 1, &st);
+ sym = st ? st->n.sym : NULL;
if (sym && csym != sym
&& sym->ns == gfc_current_ns
&& sym->attr.flavor == FL_PROCEDURE
&& sym->attr.contained)
{
sym->refs++;
- csym = sym;
- c->symtree->n.sym = sym;
+ if (csym->attr.generic)
+ c->symtree->n.sym = sym;
+ else
+ c->symtree = st;
+ csym = c->symtree->n.sym;
}
}