[clang] [clang][NFC] ItaniumMangle: modernize code style (PR #183027)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 8 16:08:03 PDT 2026
https://github.com/eiytoq updated https://github.com/llvm/llvm-project/pull/183027
>From bc0a1e4b7c5becc68439d5256bebbb2ae15735a4 Mon Sep 17 00:00:00 2001
From: eiytoq <eiytoq at outlook.com>
Date: Tue, 24 Feb 2026 19:11:15 +0800
Subject: [PATCH 1/2] [clang][NFC] ItaniumMangle: modernize code style
---
clang/lib/AST/ItaniumMangle.cpp | 80 +++++++++++++++------------------
1 file changed, 37 insertions(+), 43 deletions(-)
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index df00760fa911b..79d71e3da4fea 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -68,7 +68,7 @@ static bool isLambda(const NamedDecl *ND) {
static const unsigned UnknownArity = ~0U;
class ItaniumMangleContextImpl : public ItaniumMangleContext {
- typedef std::pair<const DeclContext*, IdentifierInfo*> DiscriminatorKeyTy;
+ using DiscriminatorKeyTy = std::pair<const DeclContext *, IdentifierInfo *>;
llvm::DenseMap<DiscriminatorKeyTy, unsigned> Discriminator;
llvm::DenseMap<const NamedDecl*, unsigned> Uniquifier;
const DiscriminatorOverrideTy DiscriminatorOverride = nullptr;
@@ -140,10 +140,9 @@ class ItaniumMangleContextImpl : public ItaniumMangleContext {
return false;
// Anonymous tags are already numbered.
- if (const TagDecl *Tag = dyn_cast<TagDecl>(ND)) {
- if (Tag->getName().empty() && !Tag->getTypedefNameForAnonDecl())
- return false;
- }
+ if (const TagDecl *Tag = dyn_cast<TagDecl>(ND);
+ Tag && Tag->getName().empty() && !Tag->getTypedefNameForAnonDecl())
+ return false;
// Use the canonical number for externally visible decls.
if (ND->isExternallyVisible()) {
@@ -283,7 +282,7 @@ class CXXNameMangler {
// The goal is to annotate against which version of a library an object was
// built and to be able to provide backwards compatibility ("dual abi").
// For more information see docs/ItaniumMangleAbiTags.rst.
- typedef SmallVector<StringRef, 4> AbiTagList;
+ using AbiTagList = SmallVector<StringRef, 4>;
// State to gather all implicit and explicit tags used in a mangled name.
// Must always have an instance of this while emitting any name to keep
@@ -674,9 +673,8 @@ ItaniumMangleContextImpl::getEffectiveDeclContext(const Decl *D) {
return getEffectiveDeclContext(cast<Decl>(DC));
}
- if (const auto *VD = dyn_cast<VarDecl>(D))
- if (VD->isExternC())
- return getASTContext().getTranslationUnitDecl();
+ if (const auto *VD = dyn_cast<VarDecl>(D); VD && VD->isExternC())
+ return getASTContext().getTranslationUnitDecl();
if (const auto *FD = getASTContext().getLangOpts().getClangABICompat() >
LangOptions::ClangABI::Ver19
@@ -1110,8 +1108,8 @@ void CXXNameMangler::mangleModuleName(const NamedDecl *ND) {
// ::= W P <source-name>
void CXXNameMangler::mangleModuleNamePrefix(StringRef Name, bool IsPartition) {
// <substitution> ::= S <seq-id> _
- auto It = ModuleSubstitutions.find(Name);
- if (It != ModuleSubstitutions.end()) {
+ if (auto It = ModuleSubstitutions.find(Name);
+ It != ModuleSubstitutions.end()) {
Out << 'S';
mangleSeqID(It->second);
return;
@@ -1119,18 +1117,18 @@ void CXXNameMangler::mangleModuleNamePrefix(StringRef Name, bool IsPartition) {
// FIXME: Preserve hierarchy in module names rather than flattening
// them to strings; use Module*s as substitution keys.
- auto Parts = Name.rsplit('.');
- if (Parts.second.empty())
- Parts.second = Parts.first;
+ auto [Prefix, SubName] = Name.rsplit('.');
+ if (SubName.empty())
+ SubName = Prefix;
else {
- mangleModuleNamePrefix(Parts.first, IsPartition);
+ mangleModuleNamePrefix(Prefix, IsPartition);
IsPartition = false;
}
Out << 'W';
if (IsPartition)
Out << 'P';
- Out << Parts.second.size() << Parts.second;
+ Out << SubName.size() << SubName;
ModuleSubstitutions.insert({Name, SeqID++});
}
@@ -1979,15 +1977,14 @@ void CXXNameMangler::mangleBlockForPrefix(const BlockDecl *Block) {
void CXXNameMangler::mangleUnqualifiedBlock(const BlockDecl *Block) {
// When trying to be ABI-compatibility with clang 12 and before, mangle a
// <data-member-prefix> now, with no substitutions and no <template-args>.
- if (Decl *Context = Block->getBlockManglingContextDecl()) {
- if (isCompatibleWith(LangOptions::ClangABI::Ver12) &&
- (isa<VarDecl>(Context) || isa<FieldDecl>(Context)) &&
- Context->getDeclContext()->isRecord()) {
- const auto *ND = cast<NamedDecl>(Context);
- if (ND->getIdentifier()) {
- mangleSourceNameWithAbiTags(ND);
- Out << 'M';
- }
+ if (Decl *Context = Block->getBlockManglingContextDecl();
+ Context && isCompatibleWith(LangOptions::ClangABI::Ver12) &&
+ (isa<VarDecl>(Context) || isa<FieldDecl>(Context)) &&
+ Context->getDeclContext()->isRecord()) {
+ const auto *ND = cast<NamedDecl>(Context);
+ if (ND->getIdentifier()) {
+ mangleSourceNameWithAbiTags(ND);
+ Out << 'M';
}
}
@@ -2097,18 +2094,17 @@ void CXXNameMangler::mangleRequiresClause(const Expr *RequiresClause) {
void CXXNameMangler::mangleLambda(const CXXRecordDecl *Lambda) {
// When trying to be ABI-compatibility with clang 12 and before, mangle a
// <data-member-prefix> now, with no substitutions.
- if (Decl *Context = Lambda->getLambdaContextDecl()) {
- if (isCompatibleWith(LangOptions::ClangABI::Ver12) &&
- (isa<VarDecl>(Context) || isa<FieldDecl>(Context)) &&
- !isa<ParmVarDecl>(Context)) {
- if (const IdentifierInfo *Name
- = cast<NamedDecl>(Context)->getIdentifier()) {
- mangleSourceName(Name);
- const TemplateArgumentList *TemplateArgs = nullptr;
- if (GlobalDecl TD = isTemplate(cast<NamedDecl>(Context), TemplateArgs))
- mangleTemplateArgs(asTemplateName(TD), *TemplateArgs);
- Out << 'M';
- }
+ if (Decl *Context = Lambda->getLambdaContextDecl();
+ Context && isCompatibleWith(LangOptions::ClangABI::Ver12) &&
+ (isa<VarDecl>(Context) || isa<FieldDecl>(Context)) &&
+ !isa<ParmVarDecl>(Context)) {
+ if (const IdentifierInfo *Name =
+ cast<NamedDecl>(Context)->getIdentifier()) {
+ mangleSourceName(Name);
+ const TemplateArgumentList *TemplateArgs = nullptr;
+ if (GlobalDecl TD = isTemplate(cast<NamedDecl>(Context), TemplateArgs))
+ mangleTemplateArgs(asTemplateName(TD), *TemplateArgs);
+ Out << 'M';
}
}
@@ -3005,9 +3001,7 @@ void CXXNameMangler::mangleType(QualType T) {
T = Desugared;
} while (true);
}
- SplitQualType split = T.split();
- Qualifiers quals = split.Quals;
- const Type *ty = split.Ty;
+ auto [ty, quals] = T.split();
bool isSubstitutable =
isTypeSubstitutable(quals, ty, Context.getASTContext());
@@ -3027,9 +3021,9 @@ void CXXNameMangler::mangleType(QualType T) {
if (quals || ty->isDependentAddressSpaceType()) {
if (const DependentAddressSpaceType *DAST =
dyn_cast<DependentAddressSpaceType>(ty)) {
- SplitQualType splitDAST = DAST->getPointeeType().split();
- mangleQualifiers(splitDAST.Quals, DAST);
- mangleType(QualType(splitDAST.Ty, 0));
+ auto [Ty, Quals] = DAST->getPointeeType().split();
+ mangleQualifiers(Quals, DAST);
+ mangleType(QualType(Ty, 0));
} else {
mangleQualifiers(quals);
>From 806a038b958e7bf031be15cf55c77fd2b6cba771 Mon Sep 17 00:00:00 2001
From: eiytoq <eiytoq at outlook.com>
Date: Tue, 24 Feb 2026 19:23:59 +0800
Subject: [PATCH 2/2] Addressed comments
Co-authored-by: Timm Baeder <tbaeder at redhat.com>
---
clang/lib/AST/ItaniumMangle.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index 79d71e3da4fea..4cf4835bc25d8 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -140,7 +140,7 @@ class ItaniumMangleContextImpl : public ItaniumMangleContext {
return false;
// Anonymous tags are already numbered.
- if (const TagDecl *Tag = dyn_cast<TagDecl>(ND);
+ if (const auto *Tag = dyn_cast<TagDecl>(ND);
Tag && Tag->getName().empty() && !Tag->getTypedefNameForAnonDecl())
return false;
More information about the cfe-commits
mailing list