diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index df00760fa911b..4cf4835bc25d8 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 DiscriminatorKeyTy; + using DiscriminatorKeyTy = std::pair; llvm::DenseMap Discriminator; llvm::DenseMap 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(ND)) { - if (Tag->getName().empty() && !Tag->getTypedefNameForAnonDecl()) - return false; - } + if (const auto *Tag = dyn_cast(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 AbiTagList; + using AbiTagList = SmallVector; // 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(DC)); } - if (const auto *VD = dyn_cast(D)) - if (VD->isExternC()) - return getASTContext().getTranslationUnitDecl(); + if (const auto *VD = dyn_cast(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 void CXXNameMangler::mangleModuleNamePrefix(StringRef Name, bool IsPartition) { // ::= S _ - 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 // now, with no substitutions and no . - if (Decl *Context = Block->getBlockManglingContextDecl()) { - if (isCompatibleWith(LangOptions::ClangABI::Ver12) && - (isa(Context) || isa(Context)) && - Context->getDeclContext()->isRecord()) { - const auto *ND = cast(Context); - if (ND->getIdentifier()) { - mangleSourceNameWithAbiTags(ND); - Out << 'M'; - } + if (Decl *Context = Block->getBlockManglingContextDecl(); + Context && isCompatibleWith(LangOptions::ClangABI::Ver12) && + (isa(Context) || isa(Context)) && + Context->getDeclContext()->isRecord()) { + const auto *ND = cast(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 // now, with no substitutions. - if (Decl *Context = Lambda->getLambdaContextDecl()) { - if (isCompatibleWith(LangOptions::ClangABI::Ver12) && - (isa(Context) || isa(Context)) && - !isa(Context)) { - if (const IdentifierInfo *Name - = cast(Context)->getIdentifier()) { - mangleSourceName(Name); - const TemplateArgumentList *TemplateArgs = nullptr; - if (GlobalDecl TD = isTemplate(cast(Context), TemplateArgs)) - mangleTemplateArgs(asTemplateName(TD), *TemplateArgs); - Out << 'M'; - } + if (Decl *Context = Lambda->getLambdaContextDecl(); + Context && isCompatibleWith(LangOptions::ClangABI::Ver12) && + (isa(Context) || isa(Context)) && + !isa(Context)) { + if (const IdentifierInfo *Name = + cast(Context)->getIdentifier()) { + mangleSourceName(Name); + const TemplateArgumentList *TemplateArgs = nullptr; + if (GlobalDecl TD = isTemplate(cast(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(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);