[clang][DepScan] Pass references to ModuleDeps instead of ModuleID in lookupModuleOutput callbacks, NFCI (#131688)
This allows clients to reference more read-only attributes, like IsInStableDirectories.
diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h
index d13c3ee..0809e4f 100644
--- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h
+++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h
@@ -26,7 +26,7 @@
/// A callback to lookup module outputs for "-fmodule-file=", "-o" etc.
using LookupModuleOutputCallback =
- std::function<std::string(const ModuleID &, ModuleOutputKind)>;
+ llvm::function_ref<std::string(const ModuleDeps &, ModuleOutputKind)>;
/// Graph of modular dependencies.
using ModuleDepsGraph = std::vector<ModuleDeps>;
@@ -211,16 +211,16 @@
CallbackActionController(LookupModuleOutputCallback LMO)
: LookupModuleOutput(std::move(LMO)) {
if (!LookupModuleOutput) {
- LookupModuleOutput = [](const ModuleID &,
+ LookupModuleOutput = [](const ModuleDeps &,
ModuleOutputKind) -> std::string {
llvm::report_fatal_error("unexpected call to lookupModuleOutput");
};
}
}
- std::string lookupModuleOutput(const ModuleID &ID,
+ std::string lookupModuleOutput(const ModuleDeps &MD,
ModuleOutputKind Kind) override {
- return LookupModuleOutput(ID, Kind);
+ return LookupModuleOutput(MD, Kind);
}
private:
diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h
index 5f0b983..3e232c7 100644
--- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h
+++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h
@@ -68,7 +68,7 @@
public:
virtual ~DependencyActionController();
- virtual std::string lookupModuleOutput(const ModuleID &ID,
+ virtual std::string lookupModuleOutput(const ModuleDeps &MD,
ModuleOutputKind Kind) = 0;
};
diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp
index 2b4c2bb7..b015e79 100644
--- a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp
+++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp
@@ -118,7 +118,7 @@
class P1689ActionController : public DependencyActionController {
public:
// The lookupModuleOutput is for clang modules. P1689 format don't need it.
- std::string lookupModuleOutput(const ModuleID &,
+ std::string lookupModuleOutput(const ModuleDeps &,
ModuleOutputKind Kind) override {
return "";
}
diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
index 1c36039..d715ef8 100644
--- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -196,17 +196,17 @@
void ModuleDepCollector::addOutputPaths(CowCompilerInvocation &CI,
ModuleDeps &Deps) {
CI.getMutFrontendOpts().OutputFile =
- Controller.lookupModuleOutput(Deps.ID, ModuleOutputKind::ModuleFile);
+ Controller.lookupModuleOutput(Deps, ModuleOutputKind::ModuleFile);
if (!CI.getDiagnosticOpts().DiagnosticSerializationFile.empty())
CI.getMutDiagnosticOpts().DiagnosticSerializationFile =
Controller.lookupModuleOutput(
- Deps.ID, ModuleOutputKind::DiagnosticSerializationFile);
+ Deps, ModuleOutputKind::DiagnosticSerializationFile);
if (!CI.getDependencyOutputOpts().OutputFile.empty()) {
- CI.getMutDependencyOutputOpts().OutputFile = Controller.lookupModuleOutput(
- Deps.ID, ModuleOutputKind::DependencyFile);
+ CI.getMutDependencyOutputOpts().OutputFile =
+ Controller.lookupModuleOutput(Deps, ModuleOutputKind::DependencyFile);
CI.getMutDependencyOutputOpts().Targets =
splitString(Controller.lookupModuleOutput(
- Deps.ID, ModuleOutputKind::DependencyTargets),
+ Deps, ModuleOutputKind::DependencyTargets),
'\0');
if (!CI.getDependencyOutputOpts().OutputFile.empty() &&
CI.getDependencyOutputOpts().Targets.empty()) {
@@ -404,8 +404,10 @@
void ModuleDepCollector::addModuleFiles(
CompilerInvocation &CI, ArrayRef<ModuleID> ClangModuleDeps) const {
for (const ModuleID &MID : ClangModuleDeps) {
+ ModuleDeps *MD = ModuleDepsByID.lookup(MID);
std::string PCMPath =
- Controller.lookupModuleOutput(MID, ModuleOutputKind::ModuleFile);
+ Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
+
if (Service.shouldEagerLoadModules())
CI.getFrontendOpts().ModuleFiles.push_back(std::move(PCMPath));
else
@@ -417,8 +419,10 @@
void ModuleDepCollector::addModuleFiles(
CowCompilerInvocation &CI, ArrayRef<ModuleID> ClangModuleDeps) const {
for (const ModuleID &MID : ClangModuleDeps) {
+ ModuleDeps *MD = ModuleDepsByID.lookup(MID);
std::string PCMPath =
- Controller.lookupModuleOutput(MID, ModuleOutputKind::ModuleFile);
+ Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
+
if (Service.shouldEagerLoadModules())
CI.getMutFrontendOpts().ModuleFiles.push_back(std::move(PCMPath));
else
diff --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
index 5b25597..fa63649 100644
--- a/clang/tools/clang-scan-deps/ClangScanDeps.cpp
+++ b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
@@ -709,9 +709,10 @@
return std::string(ExplicitPCMPath);
}
-static std::string lookupModuleOutput(const ModuleID &MID, ModuleOutputKind MOK,
+static std::string lookupModuleOutput(const ModuleDeps &MD,
+ ModuleOutputKind MOK,
StringRef OutputDir) {
- std::string PCMPath = constructPCMPath(MID, OutputDir);
+ std::string PCMPath = constructPCMPath(MD.ID, OutputDir);
switch (MOK) {
case ModuleOutputKind::ModuleFile:
return PCMPath;
@@ -974,8 +975,8 @@
std::string OutputDir(ModuleFilesDir);
if (OutputDir.empty())
OutputDir = getModuleCachePath(Input->CommandLine);
- auto LookupOutput = [&](const ModuleID &MID, ModuleOutputKind MOK) {
- return ::lookupModuleOutput(MID, MOK, OutputDir);
+ auto LookupOutput = [&](const ModuleDeps &MD, ModuleOutputKind MOK) {
+ return ::lookupModuleOutput(MD, MOK, OutputDir);
};
// Run the tool on it.