diff --git a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h index 325f15fef0174..8a6b9c6755deb 100644 --- a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h +++ b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h @@ -183,6 +183,11 @@ struct ModuleDeps { /// module. Does not include argv[0]. const std::vector &getBuildArguments() const; + /// Experimental: get a copy of the underlying CompilerInvocation before + /// calling `getBuildArguments`. This provides a short cut to inspect/modify + /// the compiler invocation state. + CowCompilerInvocation getUnderlyingCompilerInvocation() const; + private: friend class ModuleDepCollector; friend class ModuleDepCollectorPP; diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index 6c40708c0ad16..c4ef2d2ed637b 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -46,6 +46,13 @@ const std::vector &ModuleDeps::getBuildArguments() const { return std::get>(BuildInfo); } + +CowCompilerInvocation ModuleDeps::getUnderlyingCompilerInvocation() const { + assert(std::holds_alternative(BuildInfo) && + "ModuleDeps doesn't hold compiler invocation"); + return *std::get_if(&BuildInfo); +} + static void optimizeHeaderSearchOpts(HeaderSearchOptions &Opts, ASTReader &Reader, const serialization::ModuleFile &MF,