[clang] [clang][Lex] Unique ModuleMacros with a UniquingSet (NFC) (PR #223270)
Kazu Hirata via cfe-commits
cfe-commits at lists.llvm.org
Sun Sep 13 12:27:52 PDT 2026
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/223270
This patch migrates ModuleMacros in Preprocessor from llvm::FoldingSet
to llvm::UniquingSet.
ModuleMacro keys on a pair of Module * and const IdentifierInfo *.
Switching to UniquingSet allows us to look up macros with a typed key,
eliminating FoldingSetNodeID serialization at lookup sites and removing
ModuleMacro::Profile.
Assisted-by: Antigravity
>From 1cac21bee463ed902f66594f5591f29653fd445a Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sun, 13 Sep 2026 12:18:48 -0700
Subject: [PATCH] [clang][Lex] Unique ModuleMacros with a UniquingSet (NFC)
This patch migrates ModuleMacros in Preprocessor from llvm::FoldingSet
to llvm::UniquingSet.
ModuleMacro keys on a pair of Module * and const IdentifierInfo *.
Switching to UniquingSet allows us to look up macros with a typed key,
eliminating FoldingSetNodeID serialization at lookup sites and removing
ModuleMacro::Profile.
Assisted-by: Antigravity
---
clang/include/clang/Lex/MacroInfo.h | 12 +++---------
clang/include/clang/Lex/Preprocessor.h | 2 +-
clang/lib/Lex/PPMacroExpansion.cpp | 10 ++--------
3 files changed, 6 insertions(+), 18 deletions(-)
diff --git a/clang/include/clang/Lex/MacroInfo.h b/clang/include/clang/Lex/MacroInfo.h
index 60048688a9a33..e5dbc7f92a9ac 100644
--- a/clang/include/clang/Lex/MacroInfo.h
+++ b/clang/include/clang/Lex/MacroInfo.h
@@ -511,7 +511,7 @@ MacroDirective::DefInfo::getPreviousDefinition() {
/// the final directive for a macro name within a module. These entities also
/// represent the macro override graph.
///
-/// These are stored in a FoldingSet in the preprocessor.
+/// These are stored in a UniquingSet in the preprocessor.
class ModuleMacro : public llvm::FoldingSetNode {
friend class Preprocessor;
@@ -543,14 +543,8 @@ class ModuleMacro : public llvm::FoldingSetNode {
const IdentifierInfo *II, MacroInfo *Macro,
ArrayRef<ModuleMacro *> Overrides);
- void Profile(llvm::FoldingSetNodeID &ID) const {
- return Profile(ID, OwningModule, II);
- }
-
- static void Profile(llvm::FoldingSetNodeID &ID, Module *OwningModule,
- const IdentifierInfo *II) {
- ID.AddPointer(OwningModule);
- ID.AddPointer(II);
+ std::pair<Module *, const IdentifierInfo *> getKey() const {
+ return {OwningModule, II};
}
/// Get the name of the macro.
diff --git a/clang/include/clang/Lex/Preprocessor.h b/clang/include/clang/Lex/Preprocessor.h
index d94f3d2cbe8ed..31b68a0fd0670 100644
--- a/clang/include/clang/Lex/Preprocessor.h
+++ b/clang/include/clang/Lex/Preprocessor.h
@@ -1091,7 +1091,7 @@ class Preprocessor {
llvm::SmallSetVector<Module *, 2> AffectingClangModules;
/// The set of known macros exported from modules.
- llvm::FoldingSet<ModuleMacro> ModuleMacros;
+ llvm::UniquingSet<ModuleMacro> ModuleMacros;
/// The names of potential module macros that we've not yet processed.
llvm::SmallVector<IdentifierInfo *, 32> PendingModuleMacroNames;
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp
index a8b9bcd4e4572..83f78700a4e72 100644
--- a/clang/lib/Lex/PPMacroExpansion.cpp
+++ b/clang/lib/Lex/PPMacroExpansion.cpp
@@ -131,11 +131,8 @@ ModuleMacro *Preprocessor::addModuleMacro(Module *Mod, IdentifierInfo *II,
MacroInfo *Macro,
ArrayRef<ModuleMacro *> Overrides,
bool &New) {
- llvm::FoldingSetNodeID ID;
- ModuleMacro::Profile(ID, Mod, II);
-
llvm::FoldingSetInsertToken InsertToken;
- if (auto *MM = ModuleMacros.lookup(ID, InsertToken)) {
+ if (auto *MM = ModuleMacros.lookup({Mod, II}, InsertToken)) {
New = false;
return MM;
}
@@ -168,11 +165,8 @@ ModuleMacro *Preprocessor::addModuleMacro(Module *Mod, IdentifierInfo *II,
ModuleMacro *Preprocessor::getModuleMacro(Module *Mod,
const IdentifierInfo *II) {
- llvm::FoldingSetNodeID ID;
- ModuleMacro::Profile(ID, Mod, II);
-
llvm::FoldingSetInsertToken InsertToken;
- return ModuleMacros.lookup(ID, InsertToken);
+ return ModuleMacros.lookup({Mod, II}, InsertToken);
}
void Preprocessor::updateModuleMacroInfo(const IdentifierInfo *II,
More information about the cfe-commits
mailing list