Author: Iain Sandoe Date: 2022-02-27T10:07:11Z New Revision: 853ca5472314e109b98e46f0985f27f79e17d2bd
URL: https://github.com/llvm/llvm-project/commit/853ca5472314e109b98e46f0985f27f79e17d2bd DIFF: https://github.com/llvm/llvm-project/commit/853ca5472314e109b98e46f0985f27f79e17d2bd.diff LOG: [C++20][Modules][6/8] Record direct module imports. This is a small cache to avoid having to check both Exports and Imports. Differential Revision: https://reviews.llvm.org/D118589 Added: Modified: clang/include/clang/Sema/Sema.h clang/lib/Sema/SemaModule.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 0b872c48482db..9937846e05658 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -2219,6 +2219,9 @@ class Sema final { /// 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; @@ -2246,6 +2249,10 @@ class Sema final { 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); diff --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp index 0606b3a4edae8..a829693fafebc 100644 --- a/clang/lib/Sema/SemaModule.cpp +++ b/clang/lib/Sema/SemaModule.cpp @@ -514,6 +514,11 @@ DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, 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; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits