diff options
Diffstat (limited to 'gcc/fortran/symbol.c')
-rw-r--r-- | gcc/fortran/symbol.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index ad1c498..b3321ec 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -2677,6 +2677,11 @@ gfc_find_sym_tree (const char *name, gfc_namespace *ns, int parent_flag, if (!parent_flag) break; + /* Don't escape an interface block. */ + if (ns && !ns->has_import_set + && ns->proc_name && ns->proc_name->attr.if_source == IFSRC_IFBODY) + break; + ns = ns->parent; } while (ns != NULL); @@ -2835,17 +2840,14 @@ gfc_get_ha_sym_tree (const char *name, gfc_symtree **result) return i; } - if (gfc_current_ns->parent != NULL) - { - i = gfc_find_sym_tree (name, gfc_current_ns->parent, 1, &st); - if (i) - return i; + i = gfc_find_sym_tree (name, gfc_current_ns, 1, &st); + if (i) + return i; - if (st != NULL) - { - *result = st; - return 0; - } + if (st != NULL) + { + *result = st; + return 0; } return gfc_get_sym_tree (name, gfc_current_ns, result, false); |