[PATCH] D118589: [C++20][Modules] Record direct module imports.
Iain Sandoe via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 15 08:33:21 PST 2022
iains created this revision.
iains updated this revision to Diff 404485.
iains added a comment.
iains updated this revision to Diff 405596.
iains updated this revision to Diff 408764.
iains added reviewers: rsmith, urnathan, ChuanqiXu.
iains published this revision for review.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Rebased onto dependent patch after changes
iains added a comment.
rebased onto import state machine.
iains added a comment.
Rebased onto other modules work.
iains added a comment.
patch 6 of 8 to implement basic C++20 module partition support.
This is a small cache to avoid having to check both Exports and
Imports.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D118589
Files:
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaModule.cpp
Index: clang/lib/Sema/SemaModule.cpp
===================================================================
--- clang/lib/Sema/SemaModule.cpp
+++ clang/lib/Sema/SemaModule.cpp
@@ -507,6 +507,11 @@
assert (ThisModule && "was expecting a module if building one");
}
+ // In some cases we need to know if an entity was present in a directly-
+ // imported module (as opposed to a transitive import). This avoids
+ // searching both Imports and Exports.
+ DirectModuleImports.insert(Mod);
+
return Import;
}
Index: clang/include/clang/Sema/Sema.h
===================================================================
--- clang/include/clang/Sema/Sema.h
+++ clang/include/clang/Sema/Sema.h
@@ -2222,6 +2222,9 @@
/// The global module fragment of the current translation unit.
clang::Module *GlobalModuleFragment = nullptr;
+ /// The modules we imported directly.
+ llvm::SmallPtrSet<clang::Module *, 8> DirectModuleImports;
+
/// Namespace definitions that we will export when they finish.
llvm::SmallPtrSet<const NamespaceDecl*, 8> DeferredExportedNamespaces;
@@ -2249,6 +2252,10 @@
return Entity->getOwningModule();
}
+ bool isModuleDirectlyImported(const Module *M) {
+ return DirectModuleImports.contains(M);
+ }
+
/// Make a merged definition of an existing hidden definition \p ND
/// visible at the specified location.
void makeMergedDefinitionVisible(NamedDecl *ND);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118589.408764.patch
Type: text/x-patch
Size: 1428 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220215/9b7200f6/attachment.bin>
More information about the cfe-commits
mailing list