From 7b006030774e2c3c4a7c86a876358ee8272e78d7 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Thu, 4 Dec 2025 14:33:37 -0800 Subject: [PATCH] [Dependency Scanning] Do not re-query a given clang module identifier more than once During parallel clang module dependency resolution, an unintended side-effect of https://github.com/swiftlang/swift/pull/84929 is that we stopped uniquing the module identifiers we query to the Clang dependency scanner. This change ensures we do not query the same identifier more than once. Resolves rdar://165133617 --- lib/DependencyScan/ModuleDependencyScanner.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/DependencyScan/ModuleDependencyScanner.cpp b/lib/DependencyScan/ModuleDependencyScanner.cpp index f40137d3e6f75..83c60ed7e0177 100644 --- a/lib/DependencyScan/ModuleDependencyScanner.cpp +++ b/lib/DependencyScan/ModuleDependencyScanner.cpp @@ -1113,17 +1113,20 @@ void ModuleDependencyScanner::performParallelClangModuleLookup( }; // Enque asynchronous lookup tasks + llvm::StringSet<> queriedIdentifiers; for (const auto &unresolvedImports : unresolvedImportsMap) for (const auto &unresolvedImportInfo : unresolvedImports.second) - ScanningThreadPool.async( - scanForClangModuleDependency, - getModuleImportIdentifier(unresolvedImportInfo.importIdentifier)); + if (queriedIdentifiers.insert(unresolvedImportInfo.importIdentifier).second) + ScanningThreadPool.async( + scanForClangModuleDependency, + getModuleImportIdentifier(unresolvedImportInfo.importIdentifier)); for (const auto &unresolvedImports : unresolvedOptionalImportsMap) for (const auto &unresolvedImportInfo : unresolvedImports.second) - ScanningThreadPool.async( - scanForClangModuleDependency, - getModuleImportIdentifier(unresolvedImportInfo.importIdentifier)); + if (queriedIdentifiers.insert(unresolvedImportInfo.importIdentifier).second) + ScanningThreadPool.async( + scanForClangModuleDependency, + getModuleImportIdentifier(unresolvedImportInfo.importIdentifier)); ScanningThreadPool.wait(); }