diff options
author | Jan Svoboda <jan_svoboda@apple.com> | 2023-07-28 11:45:39 -0700 |
---|---|---|
committer | Jan Svoboda <jan_svoboda@apple.com> | 2023-07-28 12:04:35 -0700 |
commit | c75b331fc23192a8249dc5e95e053258f5fb5194 (patch) | |
tree | 24be38f4227bd2d71244a00dfac3bda32478a799 /clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp | |
parent | 8a077cfe23e3856d406bd3633e1a3026609f3537 (diff) | |
download | llvm-c75b331fc23192a8249dc5e95e053258f5fb5194.zip llvm-c75b331fc23192a8249dc5e95e053258f5fb5194.tar.gz llvm-c75b331fc23192a8249dc5e95e053258f5fb5194.tar.bz2 |
[clang][deps] Remove `ModuleDeps::ImportedByMainFile`
This information is already exposed via `TranslationUnitDeps::ClangModuleDeps` on the `DependencyScanningTool` level, and this patch also adds it on the `DependencyScanningWorker` level via `DependencyConsumer::handleDirectModuleDependency()`.
Besides being redundant, this bit of information is misleading for clients that share single `ModuleDeps` instance between multiple TUs (by using the `AlreadySeen` set). The module can be imported directly in some TUs but transitively in others.
Reviewed By: benlangmuir
Differential Revision: https://reviews.llvm.org/D156563
Diffstat (limited to 'clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp')
-rw-r--r-- | clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index aac24ca..060c538 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -242,7 +242,7 @@ void ModuleDepCollector::applyDiscoveredDependencies(CompilerInvocation &CI) { SmallVector<ModuleID> DirectDeps; for (const auto &KV : ModularDeps) - if (KV.second->ImportedByMainFile) + if (DirectModularDeps.contains(KV.first)) DirectDeps.push_back(KV.second->ID); // TODO: Report module maps the same way it's done for modular dependencies. @@ -364,7 +364,7 @@ void ModuleDepCollectorPP::handleImport(const Module *Imported) { MDC.DirectPrebuiltModularDeps.insert( {TopLevelModule, PrebuiltModuleDep{TopLevelModule}}); else - DirectModularDeps.insert(TopLevelModule); + MDC.DirectModularDeps.insert(TopLevelModule); } void ModuleDepCollectorPP::EndOfMainFile() { @@ -394,9 +394,9 @@ void ModuleDepCollectorPP::EndOfMainFile() { for (const Module *M : MDC.ScanInstance.getPreprocessor().getAffectingClangModules()) if (!MDC.isPrebuiltModule(M)) - DirectModularDeps.insert(M); + MDC.DirectModularDeps.insert(M); - for (const Module *M : DirectModularDeps) + for (const Module *M : MDC.DirectModularDeps) handleTopLevelModule(M); MDC.Consumer.handleDependencyOutputOpts(*MDC.Opts); @@ -408,6 +408,13 @@ void ModuleDepCollectorPP::EndOfMainFile() { for (auto &&I : MDC.ModularDeps) MDC.Consumer.handleModuleDependency(*I.second); + for (const Module *M : MDC.DirectModularDeps) { + auto It = MDC.ModularDeps.find(M); + // Only report direct dependencies that were successfully handled. + if (It != MDC.ModularDeps.end()) + MDC.Consumer.handleDirectModuleDependency(MDC.ModularDeps[M]->ID); + } + for (auto &&I : MDC.FileDeps) MDC.Consumer.handleFileDependency(I); @@ -435,7 +442,6 @@ ModuleDepCollectorPP::handleTopLevelModule(const Module *M) { ModuleDeps &MD = *ModI.first->second; MD.ID.ModuleName = M->getFullModuleName(); - MD.ImportedByMainFile = DirectModularDeps.contains(M); MD.IsSystem = M->IsSystem; ModuleMap &ModMapInfo = |