diff options
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 73a3f20..eccf92b 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -648,18 +648,6 @@ gfc_match_use (void) if (type == INTERFACE_USER_OP) new_use->op = INTRINSIC_USER; - st = gfc_find_symtree (gfc_current_ns->sym_root, name); - if (st && type != INTERFACE_USER_OP) - { - if (m == MATCH_YES) - gfc_error ("Symbol %qs at %L conflicts with the rename symbol " - "at %L", name, &st->n.sym->declared_at, &loc); - else - gfc_error ("Symbol %qs at %L conflicts with the symbol " - "at %L", name, &st->n.sym->declared_at, &loc); - goto cleanup; - } - if (use_list->only_flag) { if (m != MATCH_YES) @@ -691,6 +679,20 @@ gfc_match_use (void) goto cleanup; } + st = gfc_find_symtree (gfc_current_ns->sym_root, name); + if (st && type != INTERFACE_USER_OP + && (st->n.sym->module != use_list->module_name + || strcmp (st->n.sym->name, new_use->use_name) != 0)) + { + if (m == MATCH_YES) + gfc_error ("Symbol %qs at %L conflicts with the rename symbol " + "at %L", name, &st->n.sym->declared_at, &loc); + else + gfc_error ("Symbol %qs at %L conflicts with the symbol " + "at %L", name, &st->n.sym->declared_at, &loc); + goto cleanup; + } + if (strcmp (new_use->use_name, use_list->module_name) == 0 || strcmp (new_use->local_name, use_list->module_name) == 0) { |