diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-01-28 15:37:20 +0100 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2013-01-28 14:37:20 +0000 |
commit | dd8b9ddea2288c96124367bf66ce060eb1049872 (patch) | |
tree | 46bdc06e6d37edaa05bcf617578ec98dd1195a09 /gcc/fortran/symbol.c | |
parent | e63f158158a16d77dd34492534e13c1a5ca27943 (diff) | |
download | gcc-dd8b9ddea2288c96124367bf66ce060eb1049872.zip gcc-dd8b9ddea2288c96124367bf66ce060eb1049872.tar.gz gcc-dd8b9ddea2288c96124367bf66ce060eb1049872.tar.bz2 |
re PR fortran/53537 (Explicit IMPORT of renamed USE-associated symbol fails)
2013-01-28 Tobias Burnus <burnus@net-b.de>
Mikael Morin <mikael@gcc.gnu.org>
PR fortran/53537
* symbol.c (gfc_find_sym_tree): Don't look for the symbol outside an
interface block.
(gfc_get_ha_symtree): Let gfc_find_sym_tree lookup the parent namespace.
* decl.c (gfc_match_data_decl): Ditto.
(variable_decl): Remove undeclared type error.
(gfc_match_import): Use renamed instead of original name.
2013-01-28 Tobias Burnus <burnus@net-b.de>
Mikael Morin <mikael@gcc.gnu.org>
PR fortran/53537
* gfortran.dg/import2.f90: Adjust undeclared type error messages.
* gfortran.dg/import8.f90: Likewise.
* gfortran.dg/interface_derived_type_1.f90: Likewise.
* gfortran.dg/import10.f90: New test.
* gfortran.dg/import11.f90: Likewise
Co-Authored-By: Mikael Morin <mikael@gcc.gnu.org>
From-SVN: r195506
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); |