[PATCH] D121533: [clang][deps] Fix traversal of precompiled dependencies
Jan Svoboda via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Mar 12 12:17:26 PST 2022
jansvoboda11 created this revision.
jansvoboda11 added reviewers: Bigcheese, dexonsmith.
Herald added a project: All.
jansvoboda11 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
The code for traversing precompiled dependencies is somewhat complicated and contains a dangling iterator bug.
This patch uses simpler, recursive implementation.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D121533
Files:
clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
Index: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
===================================================================
--- clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
+++ clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
@@ -84,33 +84,18 @@
PrebuiltModuleFilesT &ModuleFiles,
llvm::StringSet<> &InputFiles,
bool VisitInputFiles) {
- // Maps the names of modules that weren't yet visited to their PCM path.
- llvm::StringMap<std::string> ModuleFilesWorklist;
- // Contains PCM paths of all visited modules.
- llvm::StringSet<> VisitedModuleFiles;
-
- PrebuiltModuleListener Listener(ModuleFilesWorklist, InputFiles,
- VisitInputFiles);
-
- auto GatherModuleFileInfo = [&](StringRef ASTFile) {
- ASTReader::readASTFileControlBlock(
- ASTFile, CI.getFileManager(), CI.getPCHContainerReader(),
- /*FindModuleFileExtensions=*/false, Listener,
- /*ValidateDiagnosticOptions=*/false);
- };
-
- GatherModuleFileInfo(PrebuiltModuleFilename);
- while (!ModuleFilesWorklist.empty()) {
- auto WorklistItemIt = ModuleFilesWorklist.begin();
-
- if (!VisitedModuleFiles.contains(WorklistItemIt->getValue())) {
- VisitedModuleFiles.insert(WorklistItemIt->getValue());
- GatherModuleFileInfo(WorklistItemIt->getValue());
- ModuleFiles[WorklistItemIt->getKey().str()] = WorklistItemIt->getValue();
- }
-
- ModuleFilesWorklist.erase(WorklistItemIt);
- }
+ // Maps the names of imported modules to their PCM paths.
+ llvm::StringMap<std::string> Imports;
+ PrebuiltModuleListener Listener(Imports, InputFiles, VisitInputFiles);
+ ASTReader::readASTFileControlBlock(
+ PrebuiltModuleFilename, CI.getFileManager(), CI.getPCHContainerReader(),
+ /*FindModuleFileExtensions=*/false, Listener,
+ /*ValidateDiagnosticOptions=*/false);
+
+ for (const auto &Import : Imports)
+ if (ModuleFiles.insert({Import.getKey().str(), Import.getValue()}).second)
+ visitPrebuiltModule(Import.getValue(), CI, ModuleFiles, InputFiles,
+ VisitInputFiles);
}
/// Transform arbitrary file name into an object-like file name.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121533.414871.patch
Type: text/x-patch
Size: 2292 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220312/02293cbb/attachment.bin>
More information about the cfe-commits
mailing list