diff options
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 = |