aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2023-09-07 17:45:53 -0700
committerGitHub <noreply@github.com>2023-09-07 17:45:53 -0700
commit3b1a68655e1760680b4786afb56dbb5acde272a0 (patch)
tree0f69829acbcfa780b570ce0890df70cbf342e7a7 /clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
parent904ac6fe6b95517a9d8df7e2dcb2425bf773f347 (diff)
downloadllvm-3b1a68655e1760680b4786afb56dbb5acde272a0.zip
llvm-3b1a68655e1760680b4786afb56dbb5acde272a0.tar.gz
llvm-3b1a68655e1760680b4786afb56dbb5acde272a0.tar.bz2
[clang][deps] Generate command lines lazily (#65691)
This patch makes the generation of command lines for modular dependencies lazy/on-demand. That operation is somewhat expensive and prior to this patch used to be performed multiple times for the identical `ModuleDeps` (i.e. when they were imported from multiple different TUs).
Diffstat (limited to 'clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp')
-rw-r--r--clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
index a724886..7e03a41 100644
--- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -21,6 +21,14 @@ using namespace clang;
using namespace tooling;
using namespace dependencies;
+const std::vector<std::string> &ModuleDeps::getBuildArguments() {
+ assert(!std::holds_alternative<std::monostate>(BuildInfo) &&
+ "Using uninitialized ModuleDeps");
+ if (const auto *CI = std::get_if<CowCompilerInvocation>(&BuildInfo))
+ BuildInfo = CI->getCC1CommandLine();
+ return std::get<std::vector<std::string>>(BuildInfo);
+}
+
static void optimizeHeaderSearchOpts(HeaderSearchOptions &Opts,
ASTReader &Reader,
const serialization::ModuleFile &MF) {
@@ -532,7 +540,7 @@ ModuleDepCollectorPP::handleTopLevelModule(const Module *M) {
// Finish the compiler invocation. Requires dependencies and the context hash.
MDC.addOutputPaths(CI, MD);
- MD.BuildArguments = CI.getCC1CommandLine();
+ MD.BuildInfo = std::move(CI);
return MD.ID;
}