diff options
author | Jan Svoboda <jan_svoboda@apple.com> | 2023-09-07 17:45:53 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-07 17:45:53 -0700 |
commit | 3b1a68655e1760680b4786afb56dbb5acde272a0 (patch) | |
tree | 0f69829acbcfa780b570ce0890df70cbf342e7a7 /clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp | |
parent | 904ac6fe6b95517a9d8df7e2dcb2425bf773f347 (diff) | |
download | llvm-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.cpp | 10 |
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; } |