Author: Jan Svoboda Date: 2022-09-16T09:44:12-07:00 New Revision: 4e637fcb25503cc9b3bb9af54453ac2ebc7299b1
URL: https://github.com/llvm/llvm-project/commit/4e637fcb25503cc9b3bb9af54453ac2ebc7299b1 DIFF: https://github.com/llvm/llvm-project/commit/4e637fcb25503cc9b3bb9af54453ac2ebc7299b1.diff LOG: [clang][deps] Make sure ScanInstance outlives collector The `ScanInstance` is a local variable in `DependencyScanningAction::runInvocation()` that is referenced by `ModuleDepCollector`. Since D132405, `ModuleDepCollector` can escape the function and can outlive its `ScanInstance`. This patch fixes that. Reviewed By: benlangmuir Differential Revision: https://reviews.llvm.org/D133988 Added: Modified: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp Removed: ################################################################################ diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index 3968656f4632b..7474e0272505e 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -174,7 +174,8 @@ class DependencyScanningAction : public tooling::ToolAction { Scanned = true; // Create a compiler instance to handle the actual work. - CompilerInstance ScanInstance(std::move(PCHContainerOps)); + ScanInstanceStorage.emplace(std::move(PCHContainerOps)); + CompilerInstance &ScanInstance = *ScanInstanceStorage; ScanInstance.setInvocation(std::move(Invocation)); // Create the compiler's actual diagnostics engine. @@ -304,7 +305,8 @@ class DependencyScanningAction : public tooling::ToolAction { bool OptimizeArgs; bool EagerLoadModules; bool DisableFree; - llvm::Optional<StringRef> ModuleName; + Optional<StringRef> ModuleName; + Optional<CompilerInstance> ScanInstanceStorage; std::shared_ptr<ModuleDepCollector> MDC; std::vector<std::string> LastCC1Arguments; bool Scanned = false; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits