Skip to content

Commit f905b28

Browse files
authored
Merge pull request #67577 from artemcm/ConfigureClangScanDepsWithAlreadySeen
[Dependency Scanning] Add Clang modules from scan-deps queries to theset of "already seen" modules, to pass down to subsequent queries.
2 parents f3c6eae + 0c6f212 commit f905b28

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

include/swift/AST/ModuleDependencies.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424
#include "clang/CAS/CASOptions.h"
2525
#include "clang/Tooling/DependencyScanning/DependencyScanningService.h"
2626
#include "clang/Tooling/DependencyScanning/DependencyScanningTool.h"
27+
#include "clang/Tooling/DependencyScanning/ModuleDepCollector.h"
2728
#include "llvm/ADT/ArrayRef.h"
2829
#include "llvm/ADT/IntrusiveRefCntPtr.h"
2930
#include "llvm/ADT/Optional.h"
3031
#include "llvm/ADT/StringSet.h"
32+
#include "llvm/ADT/DenseSet.h"
3133
#include "llvm/CAS/CASProvidingFileSystem.h"
3234
#include "llvm/CAS/CASReference.h"
3335
#include "llvm/CAS/CachingOnDiskFileSystem.h"
@@ -770,9 +772,6 @@ class SwiftDependencyScanningService {
770772
/// encountered.
771773
std::vector<ModuleDependencyID> AllModules;
772774

773-
/// Set containing all of the Clang modules that have already been seen.
774-
llvm::StringSet<> alreadySeenClangModules;
775-
776775
/// Dependencies for modules that have already been computed.
777776
/// This maps a dependency kind to a map of a module's name to a Dependency
778777
/// object
@@ -844,10 +843,6 @@ class SwiftDependencyScanningService {
844843
return *SharedFilesystemCache;
845844
}
846845

847-
llvm::StringSet<>& getAlreadySeenClangModules(StringRef scanningContextHash) {
848-
return getCacheForScanningContextHash(scanningContextHash)->alreadySeenClangModules;
849-
}
850-
851846
bool usingCachingFS() const { return !UseClangIncludeTree && (bool)CacheFS; }
852847

853848
llvm::cas::CachingOnDiskFileSystem &getSharedCachingFS() const {
@@ -944,6 +939,8 @@ class ModuleDependenciesCache {
944939
SwiftDependencyScanningService &globalScanningService;
945940
/// References to data in the `globalScanningService` for module dependencies
946941
ModuleDependenciesKindRefMap ModuleDependenciesMap;
942+
/// Set containing all of the Clang modules that have already been seen.
943+
llvm::DenseSet<clang::tooling::dependencies::ModuleID> alreadySeenClangModules;
947944
/// Name of the module under scan
948945
std::string mainScanModuleName;
949946
/// The context hash of the current scanning invocation
@@ -977,10 +974,13 @@ class ModuleDependenciesCache {
977974
SwiftDependencyScanningService &getScanService() {
978975
return globalScanningService;
979976
}
980-
llvm::StringSet<>& getAlreadySeenClangModules() {
981-
return globalScanningService.getAlreadySeenClangModules(scannerContextHash);
977+
llvm::DenseSet<clang::tooling::dependencies::ModuleID>& getAlreadySeenClangModules() {
978+
return alreadySeenClangModules;
982979
}
983-
980+
void addSeenClangModule(clang::tooling::dependencies::ModuleID newModule) {
981+
alreadySeenClangModules.insert(newModule);
982+
}
983+
984984
/// Look for module dependencies for a module with the given name
985985
///
986986
/// \returns the cached result, or \c None if there is no cached entry.

lib/ClangImporter/ClangModuleDependencyScanner.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ void ClangImporter::recordModuleDependencies(
143143
ModuleDependencyKind::Clang))
144144
continue;
145145

146+
// Record this module as one we have now seen, to prevent future
147+
// scand unnecessarily return it as a result
148+
cache.addSeenClangModule(clang::tooling::dependencies::ModuleID{
149+
clangModuleDep.ID.ModuleName, clangModuleDep.ID.ContextHash});
150+
146151
// File dependencies for this module.
147152
std::vector<std::string> fileDeps;
148153
for (const auto &fileDep : clangModuleDep.FileDeps) {

0 commit comments

Comments
 (0)