forked from OSchip/llvm-project
[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:
parent
e0c291a682
commit
6f300105d2
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue