-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[clang][deps] Stop relying on name of inferred module maps #114085
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
@llvm/pr-subscribers-clang Author: Jan Svoboda (jansvoboda11) ChangesWhat the special case for Full diff: https://github.com/llvm/llvm-project/pull/114085.diff 1 Files Affected:
diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
index 637416cd1fc621..7ee335ecb8510f 100644
--- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -599,14 +599,8 @@ ModuleDepCollectorPP::handleTopLevelModule(const Module *M) {
MDC.ScanInstance.getASTReader()->visitInputFileInfos(
*MF, /*IncludeSystem=*/true,
[&](const serialization::InputFileInfo &IFI, bool IsSystem) {
- // The __inferred_module.map file is an insignificant implementation
- // detail of implicitly-built modules. The PCM will also report the
- // actual on-disk module map file that allowed inferring the module,
- // which is what we need for building the module explicitly
- // Let's ignore this file.
- if (StringRef(IFI.Filename).ends_with("__inferred_module.map"))
- return;
- MDC.addFileDep(MD, IFI.Filename);
+ if (!IFI.Overridden)
+ MDC.addFileDep(MD, IFI.Filename);
});
llvm::DenseSet<const Module *> SeenDeps;
@@ -617,12 +611,8 @@ ModuleDepCollectorPP::handleTopLevelModule(const Module *M) {
MDC.ScanInstance.getASTReader()->visitInputFileInfos(
*MF, /*IncludeSystem=*/true,
[&](const serialization::InputFileInfo &IFI, bool IsSystem) {
- if (!(IFI.TopLevel && IFI.ModuleMap))
- return;
- if (StringRef(IFI.FilenameAsRequested)
- .ends_with("__inferred_module.map"))
- return;
- MD.ModuleMapFileDeps.emplace_back(IFI.FilenameAsRequested);
+ if (IFI.TopLevel && IFI.ModuleMap && !IFI.Overridden)
+ MD.ModuleMapFileDeps.emplace_back(IFI.FilenameAsRequested);
});
CowCompilerInvocation CI =
|
benlangmuir
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can this be tested?
Hmm, I'm not sure. The current tests for inferred module maps still pass. The other ways how
WDYT? |
|
Okay, sounds impractical |
What the special case for
"__inferred_module.map"was getting at is that in general we cannot report overridden files as dependencies: neither the build system nor Clang itself won't know what to do with such files that might not exist on the file system. Moreover, Clang always overrides files based on the command-line arguments, so whatever we drop this way in the scanner, the explicit build will be able to recreate.