[clang] [clang][modules] Deserialize submodules lazily (PR #194968)

Jan Svoboda via cfe-commits cfe-commits at lists.llvm.org
Wed May 6 13:54:57 PDT 2026


================
@@ -222,6 +230,41 @@ struct ModuleAttributes {
         NoUndeclaredIncludes(false) {}
 };
 
+/// A reference to either a fully materialized Module object, or
+/// a yet-to-be-deserialized submodule in an AST file.
+class ModuleRef {
+  mutable Module *Existing = nullptr;
+  mutable ExternalSubmoduleSource *ExternalSource = nullptr;
+  mutable uint64_t SubmoduleID = 0;
+
+public:
+  ModuleRef() = default;
+  ModuleRef(Module *M) : Existing(M) {}
+  ModuleRef(ExternalSubmoduleSource *ExtSrc, uint64_t SubmoduleID)
+      : ExternalSource(ExtSrc), SubmoduleID(SubmoduleID) {}
+
+  Module *getExisting() const { return Existing; }
+  void setExisting(Module *E) { Existing = E; }
----------------
jansvoboda11 wrote:

No, see https://github.com/llvm/llvm-project/pull/194968#discussion_r3197432750.

https://github.com/llvm/llvm-project/pull/194968


More information about the cfe-commits mailing list