Skip to content

Commit 30e22b0

Browse files
committed
[clang][DepScan] Pass references to ModuleDeps instead of ModuleID in lookupModuleOutput callbacks, NFCI (llvm#131688)
This allows clients to reference more read-only attributes, like IsInStableDirectories. (cherry picked from commit ad8f0e2)
1 parent 36b7b6b commit 30e22b0

File tree

6 files changed

+37
-35
lines changed

6 files changed

+37
-35
lines changed

clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ namespace dependencies {
3737

3838
/// A callback to lookup module outputs for "-fmodule-file=", "-o" etc.
3939
using LookupModuleOutputCallback =
40-
llvm::function_ref<std::string(const ModuleID &, ModuleOutputKind)>;
40+
llvm::function_ref<std::string(const ModuleDeps &, ModuleOutputKind)>;
4141

4242
/// Graph of modular dependencies.
4343
using ModuleDepsGraph = std::vector<ModuleDeps>;
@@ -292,16 +292,16 @@ class CallbackActionController : public DependencyActionController {
292292
CallbackActionController(LookupModuleOutputCallback LMO)
293293
: LookupModuleOutput(std::move(LMO)) {
294294
if (!LookupModuleOutput) {
295-
LookupModuleOutput = [](const ModuleID &,
295+
LookupModuleOutput = [](const ModuleDeps &,
296296
ModuleOutputKind) -> std::string {
297297
llvm::report_fatal_error("unexpected call to lookupModuleOutput");
298298
};
299299
}
300300
}
301301

302-
std::string lookupModuleOutput(const ModuleID &ID,
302+
std::string lookupModuleOutput(const ModuleDeps &MD,
303303
ModuleOutputKind Kind) override {
304-
return LookupModuleOutput(ID, Kind);
304+
return LookupModuleOutput(MD, Kind);
305305
}
306306

307307
private:

clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class DependencyActionController {
7979
public:
8080
virtual ~DependencyActionController();
8181

82-
virtual std::string lookupModuleOutput(const ModuleID &ID,
82+
virtual std::string lookupModuleOutput(const ModuleDeps &MD,
8383
ModuleOutputKind Kind) = 0;
8484

8585
virtual llvm::Error initialize(CompilerInstance &ScanInstance,

clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ llvm::Expected<P1689Rule> DependencyScanningTool::getP1689ModuleDependencyFile(
244244
class P1689ActionController : public DependencyActionController {
245245
public:
246246
// The lookupModuleOutput is for clang modules. P1689 format don't need it.
247-
std::string lookupModuleOutput(const ModuleID &,
247+
std::string lookupModuleOutput(const ModuleDeps &,
248248
ModuleOutputKind Kind) override {
249249
return "";
250250
}

clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -201,17 +201,17 @@ static std::vector<std::string> splitString(std::string S, char Separator) {
201201
void ModuleDepCollector::addOutputPaths(CowCompilerInvocation &CI,
202202
ModuleDeps &Deps) {
203203
CI.getMutFrontendOpts().OutputFile =
204-
Controller.lookupModuleOutput(Deps.ID, ModuleOutputKind::ModuleFile);
204+
Controller.lookupModuleOutput(Deps, ModuleOutputKind::ModuleFile);
205205
if (!CI.getDiagnosticOpts().DiagnosticSerializationFile.empty())
206206
CI.getMutDiagnosticOpts().DiagnosticSerializationFile =
207207
Controller.lookupModuleOutput(
208-
Deps.ID, ModuleOutputKind::DiagnosticSerializationFile);
208+
Deps, ModuleOutputKind::DiagnosticSerializationFile);
209209
if (!CI.getDependencyOutputOpts().OutputFile.empty()) {
210-
CI.getMutDependencyOutputOpts().OutputFile = Controller.lookupModuleOutput(
211-
Deps.ID, ModuleOutputKind::DependencyFile);
210+
CI.getMutDependencyOutputOpts().OutputFile =
211+
Controller.lookupModuleOutput(Deps, ModuleOutputKind::DependencyFile);
212212
CI.getMutDependencyOutputOpts().Targets =
213213
splitString(Controller.lookupModuleOutput(
214-
Deps.ID, ModuleOutputKind::DependencyTargets),
214+
Deps, ModuleOutputKind::DependencyTargets),
215215
'\0');
216216
if (!CI.getDependencyOutputOpts().OutputFile.empty() &&
217217
CI.getDependencyOutputOpts().Targets.empty()) {
@@ -419,10 +419,10 @@ void ModuleDepCollector::addModuleMapFiles(
419419
void ModuleDepCollector::addModuleFiles(
420420
CompilerInvocation &CI, ArrayRef<ModuleID> ClangModuleDeps) const {
421421
for (const ModuleID &MID : ClangModuleDeps) {
422+
ModuleDeps *MD = ModuleDepsByID.lookup(MID);
422423
std::string PCMPath =
423-
Controller.lookupModuleOutput(MID, ModuleOutputKind::ModuleFile);
424+
Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
424425

425-
ModuleDeps *MD = ModuleDepsByID.lookup(MID);
426426
assert(MD && "Inconsistent dependency info");
427427
if (MD->ModuleCacheKey)
428428
CI.getFrontendOpts().ModuleCacheKeys.emplace_back(PCMPath,
@@ -439,10 +439,10 @@ void ModuleDepCollector::addModuleFiles(
439439
void ModuleDepCollector::addModuleFiles(
440440
CowCompilerInvocation &CI, ArrayRef<ModuleID> ClangModuleDeps) const {
441441
for (const ModuleID &MID : ClangModuleDeps) {
442+
ModuleDeps *MD = ModuleDepsByID.lookup(MID);
442443
std::string PCMPath =
443-
Controller.lookupModuleOutput(MID, ModuleOutputKind::ModuleFile);
444+
Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
444445

445-
ModuleDeps *MD = ModuleDepsByID.lookup(MID);
446446
assert(MD && "Inconsistent dependency info");
447447
if (MD->ModuleCacheKey)
448448
CI.getMutFrontendOpts().ModuleCacheKeys.emplace_back(PCMPath,

clang/tools/clang-scan-deps/ClangScanDeps.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -988,9 +988,10 @@ static std::string constructPCMPath(ModuleID MID, StringRef OutputDir) {
988988
return std::string(ExplicitPCMPath);
989989
}
990990

991-
static std::string lookupModuleOutput(const ModuleID &MID, ModuleOutputKind MOK,
991+
static std::string lookupModuleOutput(const ModuleDeps &MD,
992+
ModuleOutputKind MOK,
992993
StringRef OutputDir) {
993-
std::string PCMPath = constructPCMPath(MID, OutputDir);
994+
std::string PCMPath = constructPCMPath(MD.ID, OutputDir);
994995
switch (MOK) {
995996
case ModuleOutputKind::ModuleFile:
996997
return PCMPath;
@@ -1326,8 +1327,8 @@ int clang_scan_deps_main(int argc, char **argv, const llvm::ToolContext &) {
13261327
std::string OutputDir(ModuleFilesDir);
13271328
if (OutputDir.empty())
13281329
OutputDir = getModuleCachePath(Input->CommandLine);
1329-
auto LookupOutput = [&](const ModuleID &MID, ModuleOutputKind MOK) {
1330-
return ::lookupModuleOutput(MID, MOK, OutputDir);
1330+
auto LookupOutput = [&](const ModuleDeps &MD, ModuleOutputKind MOK) {
1331+
return ::lookupModuleOutput(MD, MOK, OutputDir);
13311332
};
13321333

13331334
// Run the tool on it.

clang/tools/libclang/CDependencies.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ class OutputLookup {
334334
public:
335335
OutputLookup(void *MLOContext, CXModuleLookupOutputCallback *MLO)
336336
: MLOContext(MLOContext), MLO(MLO) {}
337-
std::string lookupModuleOutput(const ModuleID &ID, ModuleOutputKind MOK);
337+
std::string lookupModuleOutput(const ModuleDeps &MD, ModuleOutputKind MOK);
338338

339339
private:
340340
llvm::DenseMap<ModuleID, std::string> PCMPaths;
@@ -350,8 +350,8 @@ clang_experimental_DependencyScannerWorker_getFileDependencies_v3(
350350
CXModuleDiscoveredCallback *MDC, void *MLOContext,
351351
CXModuleLookupOutputCallback *MLO, unsigned, CXString *Error) {
352352
OutputLookup OL(MLOContext, MLO);
353-
auto LookupOutputs = [&](const ModuleID &ID, ModuleOutputKind MOK) {
354-
return OL.lookupModuleOutput(ID, MOK);
353+
auto LookupOutputs = [&](const ModuleDeps &MD, ModuleOutputKind MOK) {
354+
return OL.lookupModuleOutput(MD, MOK);
355355
};
356356
CXFileDependencies *FDeps = nullptr;
357357
CXErrorCode Result = getFileDependencies(
@@ -381,8 +381,8 @@ CXErrorCode clang_experimental_DependencyScannerWorker_getFileDependencies_v4(
381381
CXModuleLookupOutputCallback *MLO, unsigned, CXFileDependenciesList **Out,
382382
CXString *Error) {
383383
OutputLookup OL(MLOContext, MLO);
384-
auto LookupOutputs = [&](const ModuleID &ID, ModuleOutputKind MOK) {
385-
return OL.lookupModuleOutput(ID, MOK);
384+
auto LookupOutputs = [&](const ModuleDeps &MD, ModuleOutputKind MOK) {
385+
return OL.lookupModuleOutput(MD, MOK);
386386
};
387387

388388
if (!Out)
@@ -526,8 +526,8 @@ enum CXErrorCode clang_experimental_DependencyScannerWorker_getDepGraph(
526526
CXModuleLookupOutputCallback *MLO = Settings.MLO;
527527

528528
OutputLookup OL(MLOContext, MLO);
529-
auto LookupOutputs = [&](const ModuleID &ID, ModuleOutputKind MOK) {
530-
return OL.lookupModuleOutput(ID, MOK);
529+
auto LookupOutputs = [&](const ModuleDeps &MD, ModuleOutputKind MOK) {
530+
return OL.lookupModuleOutput(MD, MOK);
531531
};
532532

533533
if (!Out)
@@ -710,27 +710,28 @@ CXDiagnosticSet clang_experimental_DepGraph_getDiagnostics(CXDepGraph Graph) {
710710
return unwrap(Graph)->getDiagnosticSet();
711711
}
712712

713-
static std::string lookupModuleOutput(const ModuleID &ID, ModuleOutputKind MOK,
714-
void *MLOContext,
713+
static std::string lookupModuleOutput(const ModuleDeps &MD,
714+
ModuleOutputKind MOK, void *MLOContext,
715715
CXModuleLookupOutputCallback *MLO) {
716716
SmallVector<char, 256> Buffer(256);
717-
size_t Len = MLO(MLOContext, ID.ModuleName.c_str(), ID.ContextHash.c_str(),
718-
wrap(MOK), Buffer.data(), Buffer.size());
717+
size_t Len =
718+
MLO(MLOContext, MD.ID.ModuleName.c_str(), MD.ID.ContextHash.c_str(),
719+
wrap(MOK), Buffer.data(), Buffer.size());
719720
if (Len > Buffer.size()) {
720721
Buffer.resize(Len);
721-
Len = MLO(MLOContext, ID.ModuleName.c_str(), ID.ContextHash.c_str(),
722+
Len = MLO(MLOContext, MD.ID.ModuleName.c_str(), MD.ID.ContextHash.c_str(),
722723
wrap(MOK), Buffer.data(), Buffer.size());
723724
}
724725
return std::string(Buffer.begin(), Len);
725726
}
726727

727-
std::string OutputLookup::lookupModuleOutput(const ModuleID &ID,
728+
std::string OutputLookup::lookupModuleOutput(const ModuleDeps &MD,
728729
ModuleOutputKind MOK) {
729730
if (MOK != ModuleOutputKind::ModuleFile)
730-
return ::lookupModuleOutput(ID, MOK, MLOContext, MLO);
731+
return ::lookupModuleOutput(MD, MOK, MLOContext, MLO);
731732
// PCM paths are looked up repeatedly, so cache them.
732-
auto PCMPath = PCMPaths.insert({ID, ""});
733+
auto PCMPath = PCMPaths.insert({MD.ID, ""});
733734
if (PCMPath.second)
734-
PCMPath.first->second = ::lookupModuleOutput(ID, MOK, MLOContext, MLO);
735+
PCMPath.first->second = ::lookupModuleOutput(MD, MOK, MLOContext, MLO);
735736
return PCMPath.first->second;
736737
}

0 commit comments

Comments
 (0)