Skip to content

Commit

Permalink
[flang] Silence bogus error on use after IMPORT
Browse files Browse the repository at this point in the history
When a scope uses an explicit IMPORT statement to import a
symbol from the scope's host, it should not emit a bogus error
message later if that symbol is used in a specification construct.
The code that checks for imports being hidden by local declarations
was not allowing for the presence of host association (or USE)
indirection symbols in the local scope.  Fix by using GetUltimate()
before checking for the hidden symbol.

Differential Revision: https://reviews.llvm.org/D118747
  • Loading branch information
klausler committed Feb 2, 2022
1 parent bc699ed commit aee7056
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
9 changes: 6 additions & 3 deletions flang/lib/Semantics/resolve-names.cpp
Expand Up @@ -6769,9 +6769,12 @@ void ResolveNamesVisitor::CheckImports() {
void ResolveNamesVisitor::CheckImport(
const SourceName &location, const SourceName &name) {
if (auto *symbol{FindInScope(name)}) {
Say(location, "'%s' from host is not accessible"_err_en_US, name)
.Attach(symbol->name(), "'%s' is hidden by this entity"_en_US,
symbol->name());
const Symbol &ultimate{symbol->GetUltimate()};
if (&ultimate.owner() == &currScope()) {
Say(location, "'%s' from host is not accessible"_err_en_US, name)
.Attach(symbol->name(), "'%s' is hidden by this entity"_en_US,
symbol->name());
}
}
}

Expand Down
14 changes: 13 additions & 1 deletion flang/test/Semantics/resolve29.f90
@@ -1,5 +1,5 @@
! RUN: %python %S/test_errors.py %s %flang_fc1
module m
module m1
type t1
end type
type t3
Expand Down Expand Up @@ -42,3 +42,15 @@ subroutine s7()
call s5()
end
end module
module m2
integer, parameter :: ck = kind('a')
end module
program main
use m2
interface
subroutine s0(x)
import :: ck
character(kind=ck) :: x ! no error
end subroutine
end interface
end program

0 comments on commit aee7056

Please sign in to comment.