Skip to content

Commit 986e605

Browse files
committed
[Dependency Scanning] Re-enable querying Swift Overlays only for visible Clang modules
This change re-enables the new semantic of looking up Swift Overlay modules only for "visible" clang modules. We have investigated the failures we were seeing with this change enabled and addressed them with project-side fixes.
1 parent 89b43dc commit 986e605

File tree

2 files changed

+4
-26
lines changed

2 files changed

+4
-26
lines changed

lib/DependencyScan/ModuleDependencyScanner.cpp

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -554,23 +554,6 @@ ModuleDependencyScanner::ModuleDependencyScanner(
554554
DependencyTracker, CAS, ActionCache, PrefixMapper.get(), Diagnostics));
555555
}
556556

557-
/// Find all of the imported Clang modules starting with the given module name.
558-
static void findAllImportedClangModules(StringRef moduleName,
559-
const ModuleDependenciesCache &cache,
560-
llvm::StringSet<> &allModules) {
561-
if (!allModules.insert(moduleName).second)
562-
return;
563-
564-
auto moduleID =
565-
ModuleDependencyID{moduleName.str(), ModuleDependencyKind::Clang};
566-
auto optionalDependencies = cache.findDependency(moduleID);
567-
if (!optionalDependencies.has_value())
568-
return;
569-
570-
for (const auto &dep : cache.getAllClangDependencies(moduleID))
571-
findAllImportedClangModules(dep.ModuleName, cache, allModules);
572-
}
573-
574557
static std::set<ModuleDependencyID>
575558
collectBinarySwiftDeps(const ModuleDependenciesCache &cache) {
576559
std::set<ModuleDependencyID> binarySwiftModuleDepIDs;
@@ -1458,11 +1441,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule(
14581441
ModuleDependencyIDSetVector &swiftOverlayDependencies) {
14591442
PrettyStackTraceStringAction trace(
14601443
"Resolving Swift Overlay dependencies of module", moduleID.ModuleName);
1461-
llvm::StringSet<> allClangDependencies;
1462-
1463-
// Find all of the discovered Clang modules that this module depends on.
1464-
for (const auto &dep : cache.getAllClangDependencies(moduleID))
1465-
findAllImportedClangModules(dep.ModuleName, cache, allClangDependencies);
1444+
auto visibleClangDependencies = cache.getVisibleClangModules(moduleID);
14661445

14671446
llvm::StringMap<SwiftModuleScannerQueryResult> swiftOverlayLookupResult;
14681447
std::mutex lookupResultLock;
@@ -1493,7 +1472,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule(
14931472
};
14941473

14951474
// Enque asynchronous lookup tasks
1496-
for (const auto &clangDep : allClangDependencies)
1475+
for (const auto &clangDep : visibleClangDependencies)
14971476
ScanningThreadPool.async(scanForSwiftDependency,
14981477
getModuleImportIdentifier(clangDep.getKey().str()));
14991478
ScanningThreadPool.wait();
@@ -1522,7 +1501,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule(
15221501
lookupResult.incompatibleCandidates, cache, std::nullopt);
15231502
}
15241503
};
1525-
for (const auto &clangDep : allClangDependencies)
1504+
for (const auto &clangDep : visibleClangDependencies)
15261505
recordResult(clangDep.getKey().str());
15271506

15281507
// C++ Interop requires additional handling
@@ -1555,7 +1534,7 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependenciesForModule(
15551534
lookupCxxStdLibOverlay = false;
15561535

15571536
if (lookupCxxStdLibOverlay) {
1558-
for (const auto &clangDepNameEntry : allClangDependencies) {
1537+
for (const auto &clangDepNameEntry : visibleClangDependencies) {
15591538
auto clangDepName = clangDepNameEntry.getKey().str();
15601539

15611540
// If this Clang module is a part of the C++ stdlib, and we haven't

test/ScanDependencies/module_deps_swift_overlay_only_visible.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// REQUIRES: rdar157603647
21
// RUN: %empty-directory(%t)
32
// RUN: %empty-directory(%t/clang-module-cache)
43
// RUN: %empty-directory(%t/swiftDeps)

0 commit comments

Comments
 (0)