From a5b4c999b23db86445a73fbb7fa18f21b5ff4640 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Fri, 26 Sep 2025 14:48:33 -0700 Subject: [PATCH] Revert "[Dependency Scanning] Re-enable querying Swift Overlays only for visible Clang modules" --- .../ModuleDependencyScanner.cpp | 29 ++++++++++++++++--- ...dule_deps_swift_overlay_only_visible.swift | 1 + 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/DependencyScan/ModuleDependencyScanner.cpp b/lib/DependencyScan/ModuleDependencyScanner.cpp index d5003db6e2c97..83170da4da2c1 100644 --- a/lib/DependencyScan/ModuleDependencyScanner.cpp +++ b/lib/DependencyScan/ModuleDependencyScanner.cpp @@ -562,6 +562,23 @@ 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; @@ -1445,7 +1462,11 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( ModuleDependencyIDSetVector &swiftOverlayDependencies) { PrettyStackTraceStringAction trace( "Resolving Swift Overlay dependencies of module", moduleID.ModuleName); - auto visibleClangDependencies = cache.getVisibleClangModules(moduleID); + 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); llvm::StringMap swiftOverlayLookupResult; std::mutex lookupResultLock; @@ -1483,7 +1504,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( }; // Enque asynchronous lookup tasks - for (const auto &clangDep : visibleClangDependencies) + for (const auto &clangDep : allClangDependencies) ScanningThreadPool.async(scanForSwiftDependency, getModuleImportIdentifier(clangDep.getKey().str())); ScanningThreadPool.wait(); @@ -1512,7 +1533,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( lookupResult.incompatibleCandidates, cache, std::nullopt); } }; - for (const auto &clangDep : visibleClangDependencies) + for (const auto &clangDep : allClangDependencies) recordResult(clangDep.getKey().str()); // C++ Interop requires additional handling @@ -1545,7 +1566,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule( lookupCxxStdLibOverlay = false; if (lookupCxxStdLibOverlay) { - for (const auto &clangDepNameEntry : visibleClangDependencies) { + for (const auto &clangDepNameEntry : allClangDependencies) { 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 eff4edf747f5a..0d0c775c72aa4 100644 --- a/test/ScanDependencies/module_deps_swift_overlay_only_visible.swift +++ b/test/ScanDependencies/module_deps_swift_overlay_only_visible.swift @@ -1,3 +1,4 @@ +// REQUIRES: rdar157603647 // RUN: %empty-directory(%t) // RUN: %empty-directory(%t/clang-module-cache) // RUN: %empty-directory(%t/swiftDeps)