diff --git a/lib/DependencyScan/ModuleDependencyScanner.cpp b/lib/DependencyScan/ModuleDependencyScanner.cpp index 030dd0ed858e8..e3b1b4bfe51d0 100644 --- a/lib/DependencyScan/ModuleDependencyScanner.cpp +++ b/lib/DependencyScan/ModuleDependencyScanner.cpp @@ -554,23 +554,6 @@ ModuleDependencyScanner::ModuleDependencyScanner( DependencyTracker, CAS, ActionCache, PrefixMapper.get(), Diagnostics)); } -/// Find all of the imported Clang modules starting with the given module name. -static void findAllImportedClangModules(StringRef moduleName, - const ModuleDependenciesCache &cache, - llvm::StringSet<> &allModules) { - if (!allModules.insert(moduleName).second) - return; - - auto moduleID = - ModuleDependencyID{moduleName.str(), ModuleDependencyKind::Clang}; - auto optionalDependencies = cache.findDependency(moduleID); - if (!optionalDependencies.has_value()) - return; - - for (const auto &dep : cache.getAllClangDependencies(moduleID)) - findAllImportedClangModules(dep.ModuleName, cache, allModules); -} - static std::set collectBinarySwiftDeps(const ModuleDependenciesCache &cache) { std::set binarySwiftModuleDepIDs; @@ -1458,11 +1441,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( ModuleDependencyIDSetVector &swiftOverlayDependencies) { PrettyStackTraceStringAction trace( "Resolving Swift Overlay dependencies of module", moduleID.ModuleName); - llvm::StringSet<> allClangDependencies; - - // Find all of the discovered Clang modules that this module depends on. - for (const auto &dep : cache.getAllClangDependencies(moduleID)) - findAllImportedClangModules(dep.ModuleName, cache, allClangDependencies); + auto visibleClangDependencies = cache.getVisibleClangModules(moduleID); llvm::StringMap swiftOverlayLookupResult; std::mutex lookupResultLock; @@ -1493,7 +1472,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( }; // Enque asynchronous lookup tasks - for (const auto &clangDep : allClangDependencies) + for (const auto &clangDep : visibleClangDependencies) ScanningThreadPool.async(scanForSwiftDependency, getModuleImportIdentifier(clangDep.getKey().str())); ScanningThreadPool.wait(); @@ -1522,7 +1501,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( lookupResult.incompatibleCandidates, cache, std::nullopt); } }; - for (const auto &clangDep : allClangDependencies) + for (const auto &clangDep : visibleClangDependencies) recordResult(clangDep.getKey().str()); // C++ Interop requires additional handling @@ -1555,7 +1534,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( lookupCxxStdLibOverlay = false; if (lookupCxxStdLibOverlay) { - for (const auto &clangDepNameEntry : allClangDependencies) { + for (const auto &clangDepNameEntry : visibleClangDependencies) { auto clangDepName = clangDepNameEntry.getKey().str(); // If this Clang module is a part of the C++ stdlib, and we haven't diff --git a/test/ScanDependencies/module_deps_swift_overlay_only_visible.swift b/test/ScanDependencies/module_deps_swift_overlay_only_visible.swift index 0d0c775c72aa4..eff4edf747f5a 100644 --- a/test/ScanDependencies/module_deps_swift_overlay_only_visible.swift +++ b/test/ScanDependencies/module_deps_swift_overlay_only_visible.swift @@ -1,4 +1,3 @@ -// REQUIRES: rdar157603647 // RUN: %empty-directory(%t) // RUN: %empty-directory(%t/clang-module-cache) // RUN: %empty-directory(%t/swiftDeps)