diff --git a/flang/lib/Semantics/mod-file.cpp b/flang/lib/Semantics/mod-file.cpp --- a/flang/lib/Semantics/mod-file.cpp +++ b/flang/lib/Semantics/mod-file.cpp @@ -833,7 +833,7 @@ for (const auto &pair : scope_) { const Symbol &symbol{*pair.second}; if (const auto *useDetails{symbol.detailsIf()}) { - if (useSet_.count(useDetails->symbol()) > 0) { + if (useSet_.count(useDetails->symbol().GetUltimate()) > 0) { need_.push_back(symbol); } } diff --git a/flang/test/Semantics/modfile36.f90 b/flang/test/Semantics/modfile36.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/modfile36.f90 @@ -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