[flang] Fix bug with IMPORT of USE of USE

When a module contained an import of a use-association of a
use-association, we weren't recognizing that the symbols was needed.
The fix is the follow all of the use-associations using `GetUltimate()`.

Differential Revision: https://reviews.llvm.org/D79737
This commit is contained in:
Tim Keith 2020-05-11 13:28:05 -07:00
parent e0c291a682
commit 6f300105d2
2 changed files with 42 additions and 1 deletions

View File

@ -833,7 +833,7 @@ void SubprogramSymbolCollector::Collect() {
for (const auto &pair : scope_) {
const Symbol &symbol{*pair.second};
if (const auto *useDetails{symbol.detailsIf<UseDetails>()}) {
if (useSet_.count(useDetails->symbol()) > 0) {
if (useSet_.count(useDetails->symbol().GetUltimate()) > 0) {
need_.push_back(symbol);
}
}

View File

@ -0,0 +1,41 @@
! RUN: %S/test_modfile.sh %s %t %f18
! Check modfile that contains import of use-assocation of another use-association.
module m1
interface
subroutine s(x)
use, intrinsic :: iso_c_binding, only: c_ptr
type(c_ptr) :: x
end subroutine
end interface
end module
!Expect: m1.mod
!module m1
! interface
! subroutine s(x)
! use iso_c_binding, only: c_ptr
! type(c_ptr) :: x
! end
! end interface
!end
module m2
use, intrinsic :: iso_c_binding, only: c_ptr
interface
subroutine s(x)
import :: c_ptr
type(c_ptr) :: x
end subroutine
end interface
end module
!Expect: m2.mod
!module m2
! use iso_c_binding,only:c_ptr
! interface
! subroutine s(x)
! import::c_ptr
! type(c_ptr)::x
! end
! end interface
!end