aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2023-07-28 11:45:39 -0700
committerJan Svoboda <jan_svoboda@apple.com>2023-07-28 12:04:35 -0700
commitc75b331fc23192a8249dc5e95e053258f5fb5194 (patch)
tree24be38f4227bd2d71244a00dfac3bda32478a799 /clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
parent8a077cfe23e3856d406bd3633e1a3026609f3537 (diff)
downloadllvm-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.cpp16
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 =