diff --git a/flang/lib/Evaluate/characteristics.cpp b/flang/lib/Evaluate/characteristics.cpp --- a/flang/lib/Evaluate/characteristics.cpp +++ b/flang/lib/Evaluate/characteristics.cpp @@ -485,6 +485,11 @@ [&](const semantics::UseDetails &use) { return CharacterizeProcedure(use.symbol(), context, seenProcs); }, + [](const semantics::UseErrorDetails &) { + // Ambiguous use-association will be handled later during symbol + // checks, ignore UseErrorDetails here without actual symbol usage. + return std::optional{}; + }, [&](const semantics::HostAssocDetails &assoc) { return CharacterizeProcedure(assoc.symbol(), context, seenProcs); }, diff --git a/flang/test/Semantics/resolve112.f90 b/flang/test/Semantics/resolve112.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/resolve112.f90 @@ -0,0 +1,32 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 + +! If there are 2 or more use-associated symbols +! from different modules with the same name, +! the error should be generated only if +! the name is actually used. +module a + contains + function foo() + foo = 42 + end function foo +end module a + +module b + contains + function foo() + foo = 42 + end function foo +end module b + +subroutine without_error + use a + use b +end subroutine without_error + +subroutine with_error + use a + use b + integer :: res + ! ERROR: Reference to 'foo' is ambiguous + res = foo() +end subroutine with_error