[clang] 1b60e78 - [clang][modules] Make `ExportDecl` a `std::pair` (#194036)

via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 29 13:56:16 PDT 2026


Author: Jan Svoboda
Date: 2026-04-29T13:56:11-07:00
New Revision: 1b60e78469822b6eccedbc591ff0d56bcafac967

URL: https://github.com/llvm/llvm-project/commit/1b60e78469822b6eccedbc591ff0d56bcafac967
DIFF: https://github.com/llvm/llvm-project/commit/1b60e78469822b6eccedbc591ff0d56bcafac967.diff

LOG: [clang][modules] Make `ExportDecl` a `std::pair` (#194036)

This PR replaces `llvm::PointerIntPair` with `std::pair` for module
exports. This is NFC that enables a future PR to use a different
(larger) type to represent module references.

Added: 
    

Modified: 
    clang/include/clang/Basic/Module.h
    clang/lib/Basic/Module.cpp
    clang/lib/CodeGen/CGDeclCXX.cpp
    clang/lib/Frontend/FrontendActions.cpp
    clang/lib/Lex/ModuleMap.cpp
    clang/lib/Serialization/ASTReader.cpp
    clang/lib/Serialization/ASTWriter.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/Module.h b/clang/include/clang/Basic/Module.h
index 1d9953af057ad..03a5d460e4718 100644
--- a/clang/include/clang/Basic/Module.h
+++ b/clang/include/clang/Basic/Module.h
@@ -562,7 +562,7 @@ class alignas(8) Module {
   ///
   /// The pointer is the module being re-exported, while the bit will be true
   /// to indicate that this is a wildcard export.
-  using ExportDecl = llvm::PointerIntPair<Module *, 1, bool>;
+  using ExportDecl = std::pair<Module *, bool>;
 
   /// The set of export declarations.
   SmallVector<ExportDecl, 2> Exports;

diff  --git a/clang/lib/Basic/Module.cpp b/clang/lib/Basic/Module.cpp
index 59b93b12e5005..7b34f45276db2 100644
--- a/clang/lib/Basic/Module.cpp
+++ b/clang/lib/Basic/Module.cpp
@@ -391,8 +391,8 @@ void Module::getExportedModules(SmallVectorImpl<Module *> &Exported) const {
   bool UnrestrictedWildcard = false;
   SmallVector<Module *, 4> WildcardRestrictions;
   for (unsigned I = 0, N = Exports.size(); I != N; ++I) {
-    Module *Mod = Exports[I].getPointer();
-    if (!Exports[I].getInt()) {
+    Module *Mod = Exports[I].first;
+    if (!Exports[I].second) {
       // Export a named module directly; no wildcards involved.
       Exported.push_back(Mod);
 
@@ -405,7 +405,7 @@ void Module::getExportedModules(SmallVectorImpl<Module *> &Exported) const {
     if (UnrestrictedWildcard)
       continue;
 
-    if (Module *Restriction = Exports[I].getPointer())
+    if (Module *Restriction = Exports[I].first)
       WildcardRestrictions.push_back(Restriction);
     else {
       WildcardRestrictions.clear();
@@ -566,9 +566,9 @@ void Module::print(raw_ostream &OS, unsigned Indent, bool Dump) const {
   for (unsigned I = 0, N = Exports.size(); I != N; ++I) {
     OS.indent(Indent + 2);
     OS << "export ";
-    if (Module *Restriction = Exports[I].getPointer()) {
+    if (Module *Restriction = Exports[I].first) {
       OS << Restriction->getFullModuleName(true);
-      if (Exports[I].getInt())
+      if (Exports[I].second)
         OS << ".*";
     } else {
       OS << "*";

diff  --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index 7ae99935c8ad3..d47c50bf26243 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -707,7 +707,7 @@ void CodeGenModule::EmitCXXModuleInitFunc(Module *Primary) {
   llvm::SmallSetVector<Module *, 8> AllImports;
   // Ones that we export
   for (auto I : Primary->Exports)
-    AllImports.insert(I.getPointer());
+    AllImports.insert(I.first);
   // Ones that we only import.
   AllImports.insert_range(Primary->Imports);
   // Ones that we import in the global module fragment or the private module

diff  --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp
index c79ce90bea691..be196edc841df 100644
--- a/clang/lib/Frontend/FrontendActions.cpp
+++ b/clang/lib/Frontend/FrontendActions.cpp
@@ -971,7 +971,7 @@ void DumpModuleInfoAction::ExecuteAction() {
       if (!Primary->Exports.empty())
         Out << "   Exports:\n";
       for (unsigned MN = 0, N = Primary->Exports.size(); MN != N; ++MN) {
-        if (Module *M = Primary->Exports[MN].getPointer()) {
+        if (Module *M = Primary->Exports[MN].first) {
           PrintSubMapEntry(M->Name, M->Kind);
         }
       }

diff  --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp
index b81b1014781b9..71d8bef278179 100644
--- a/clang/lib/Lex/ModuleMap.cpp
+++ b/clang/lib/Lex/ModuleMap.cpp
@@ -1626,7 +1626,7 @@ bool ModuleMap::resolveExports(Module *Mod, bool Complain) {
   Mod->UnresolvedExports.clear();
   for (auto &UE : Unresolved) {
     Module::ExportDecl Export = resolveExport(Mod, UE, Complain);
-    if (Export.getPointer() || Export.getInt())
+    if (Export.first || Export.second)
       Mod->Exports.push_back(Export);
     else
       Mod->UnresolvedExports.push_back(UE);

diff  --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index ea5e555912048..2c0b908314fa5 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -5115,8 +5115,8 @@ ASTReader::ASTReadResult ASTReader::ReadAST(ModuleFileName FileName,
 
     case UnresolvedModuleRef::Export:
       if (ResolvedMod || Unresolved.IsWildcard)
-        Unresolved.Mod->Exports.push_back(
-          Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
+        Unresolved.Mod->Exports.push_back(Module::ExportDecl(
+            ResolvedMod, static_cast<bool>(Unresolved.IsWildcard)));
       continue;
     }
   }

diff  --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index 87434fa8d30c7..ba644fefc109a 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -3208,8 +3208,8 @@ void ASTWriter::WriteSubmodules(Module *WritingModule, ASTContext *Context) {
       for (const auto &E : Mod->Exports) {
         // FIXME: This may fail; we don't require that all exported modules
         // are local or imported.
-        Record.push_back(getSubmoduleID(E.getPointer()));
-        Record.push_back(E.getInt());
+        Record.push_back(getSubmoduleID(E.first));
+        Record.push_back(E.second);
       }
       Stream.EmitRecord(SUBMODULE_EXPORTS, Record);
     }


        


More information about the cfe-commits mailing list