diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2009-01-03 17:47:20 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2009-01-03 17:47:20 +0000 |
commit | 79b1d36cdde2ef1c586ada2b58f5b2d1441dd82f (patch) | |
tree | eec8656e222be9daf737566c62d8865eb03a690c /gcc/fortran/resolve.c | |
parent | 493aa551b29a64091d07e3a0736b5cd3b84e94a4 (diff) | |
download | gcc-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.c | 11 |
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; } } |