clang 19.0.0git
Classes | Macros | Functions
ItaniumMangle.cpp File Reference
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclOpenMP.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprConcepts.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/Mangle.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/ABI.h"
#include "clang/Basic/DiagnosticAST.h"
#include "clang/Basic/Module.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/Thunk.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/RISCVTargetParser.h"
#include <optional>
#include "clang/AST/TypeNodes.inc"
#include "clang/AST/BuiltinTypes.def"
#include "clang/Basic/OpenCLImageTypes.def"
#include "clang/Basic/OpenCLExtensionTypes.def"
#include "clang/Basic/AArch64SVEACLETypes.def"
#include "clang/Basic/PPCTypes.def"
#include "clang/Basic/RISCVVTypes.def"
#include "clang/Basic/WebAssemblyReferenceTypes.def"
#include "clang/Basic/TransformTypeTraits.def"
#include "clang/AST/StmtNodes.inc"

Go to the source code of this file.

Classes

struct  CXXNameMangler::TemplateArgManglingInfo
 
struct  CXXNameMangler::TemplateArgManglingInfo::Info
 Information about how to mangle a template argument. More...
 

Macros

#define ABSTRACT_TYPE(CLASS, PARENT)
 
#define NON_CANONICAL_TYPE(CLASS, PARENT)
 
#define TYPE(CLASS, PARENT)   void mangleType(const CLASS##Type *T);
 
#define ABSTRACT_TYPE(CLASS, PARENT)
 
#define NON_CANONICAL_TYPE(CLASS, PARENT)
 
#define TYPE(CLASS, PARENT)
 
#define BUILTIN_TYPE(Id, SingletonId)
 
#define PLACEHOLDER_TYPE(Id, SingletonId)    case BuiltinType::Id:
 
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)
 
#define EXT_OPAQUE_TYPE(ExtType, Id, Ext)
 
#define SVE_VECTOR_TYPE(InternalName, MangledName, Id, SingletonId, NumEls, ElBits, IsSigned, IsFP, IsBF)
 
#define SVE_PREDICATE_TYPE(InternalName, MangledName, Id, SingletonId, NumEls)
 
#define SVE_OPAQUE_TYPE(InternalName, MangledName, Id, SingletonId)
 
#define PPC_VECTOR_TYPE(Name, Id, Size)
 
#define RVV_TYPE(Name, Id, SingletonId)
 
#define WASM_REF_TYPE(InternalName, MangledName, Id, SingletonId, AS)
 
#define TRANSFORM_TYPE_TRAIT_DEF(Enum, Trait)
 
#define ABSTRACT_STMT(Type)
 
#define EXPR(Type, Base)
 
#define STMT(Type, Base)    case Expr::Type##Class:
 

Functions

static const GlobalDecl isTemplate (GlobalDecl GD, const TemplateArgumentList *&TemplateArgs)
 
static TemplateName asTemplateName (GlobalDecl GD)
 
static GlobalDecl getParentOfLocalEntity (const DeclContext *DC)
 
static bool isTypeSubstitutable (Qualifiers Quals, const Type *Ty, ASTContext &Ctx)
 
static StringRef mangleAArch64VectorBase (const BuiltinType *EltType)
 
static bool isParenthesizedADLCallee (const CallExpr *call)
 Look at the callee of the given call expression and determine if it's a parenthesized id-expression which would have triggered ADL otherwise.
 
static bool isZeroInitialized (QualType T, const APValue &V)
 Determine whether a given value is equivalent to zero-initialization for the purpose of discarding a trailing portion of a 'tl' mangling.
 
static QualType getLValueType (ASTContext &Ctx, const APValue &LV)
 
static IdentifierInfogetUnionInitName (SourceLocation UnionLoc, DiagnosticsEngine &Diags, const FieldDecl *FD)
 
static bool hasMangledSubstitutionQualifiers (QualType T)
 Determine whether the given type has any qualifiers that are relevant for substitutions.
 

Macro Definition Documentation

◆ ABSTRACT_STMT

#define ABSTRACT_STMT (   Type)

◆ ABSTRACT_TYPE [1/2]

#define ABSTRACT_TYPE (   CLASS,
  PARENT 
)

Definition at line 569 of file ItaniumMangle.cpp.

◆ ABSTRACT_TYPE [2/2]

#define ABSTRACT_TYPE (   CLASS,
  PARENT 
)

Definition at line 569 of file ItaniumMangle.cpp.

◆ BUILTIN_TYPE

#define BUILTIN_TYPE (   Id,
  SingletonId 
)

◆ EXPR

#define EXPR (   Type,
  Base 
)

◆ EXT_OPAQUE_TYPE

#define EXT_OPAQUE_TYPE (   ExtType,
  Id,
  Ext 
)
Value:
case BuiltinType::Id: \
type_name = "ocl_" #ExtType; \
Out << type_name.size() << type_name; \
break;

◆ IMAGE_TYPE

#define IMAGE_TYPE (   ImgType,
  Id,
  SingletonId,
  Access,
  Suffix 
)
Value:
case BuiltinType::Id: \
type_name = "ocl_" #ImgType "_" #Suffix; \
Out << type_name.size() << type_name; \
break;

◆ NON_CANONICAL_TYPE [1/2]

#define NON_CANONICAL_TYPE (   CLASS,
  PARENT 
)

Definition at line 570 of file ItaniumMangle.cpp.

◆ NON_CANONICAL_TYPE [2/2]

#define NON_CANONICAL_TYPE (   CLASS,
  PARENT 
)
Value:
case Type::CLASS: \
llvm_unreachable("can't mangle non-canonical type " #CLASS "Type"); \
return;

Definition at line 570 of file ItaniumMangle.cpp.

◆ PLACEHOLDER_TYPE

#define PLACEHOLDER_TYPE (   Id,
  SingletonId 
)     case BuiltinType::Id:

◆ PPC_VECTOR_TYPE

#define PPC_VECTOR_TYPE (   Name,
  Id,
  Size 
)
Value:
case BuiltinType::Id: \
type_name = #Name; \
Out << 'u' << type_name.size() << type_name; \
break;

◆ RVV_TYPE

#define RVV_TYPE (   Name,
  Id,
  SingletonId 
)
Value:
case BuiltinType::Id: \
type_name = Name; \
Out << 'u' << type_name.size() << type_name; \
break;

◆ STMT

#define STMT (   Type,
  Base 
)     case Expr::Type##Class:

◆ SVE_OPAQUE_TYPE

#define SVE_OPAQUE_TYPE (   InternalName,
  MangledName,
  Id,
  SingletonId 
)
Value:
case BuiltinType::Id: \
type_name = MangledName; \
Out << (type_name == InternalName ? "u" : "") << type_name.size() \
<< type_name; \
break;

◆ SVE_PREDICATE_TYPE

#define SVE_PREDICATE_TYPE (   InternalName,
  MangledName,
  Id,
  SingletonId,
  NumEls 
)
Value:
case BuiltinType::Id: \
type_name = MangledName; \
Out << (type_name == InternalName ? "u" : "") << type_name.size() \
<< type_name; \
break;

◆ SVE_VECTOR_TYPE

#define SVE_VECTOR_TYPE (   InternalName,
  MangledName,
  Id,
  SingletonId,
  NumEls,
  ElBits,
  IsSigned,
  IsFP,
  IsBF 
)
Value:
case BuiltinType::Id: \
if (T->getKind() == BuiltinType::SveBFloat16 && \
isCompatibleWith(LangOptions::ClangABI::Ver17)) { \
/* Prior to Clang 18.0 we used this incorrect mangled name */ \
type_name = "__SVBFloat16_t"; \
Out << "u" << type_name.size() << type_name; \
} else { \
type_name = MangledName; \
Out << (type_name == InternalName ? "u" : "") << type_name.size() \
<< type_name; \
} \
break;
const FunctionProtoType * T

◆ TRANSFORM_TYPE_TRAIT_DEF

#define TRANSFORM_TYPE_TRAIT_DEF (   Enum,
  Trait 
)
Value:
case UnaryTransformType::Enum: \
BuiltinName = "__" #Trait; \
break;

◆ TYPE [1/2]

#define TYPE (   CLASS,
  PARENT 
)    void mangleType(const CLASS##Type *T);

Definition at line 571 of file ItaniumMangle.cpp.

◆ TYPE [2/2]

#define TYPE (   CLASS,
  PARENT 
)
Value:
case Type::CLASS: \
mangleType(static_cast<const CLASS##Type*>(ty)); \
break;
The base class of the type hierarchy.
Definition: Type.h:1813

Definition at line 571 of file ItaniumMangle.cpp.

◆ WASM_REF_TYPE

#define WASM_REF_TYPE (   InternalName,
  MangledName,
  Id,
  SingletonId,
  AS 
)
Value:
case BuiltinType::Id: \
type_name = MangledName; \
Out << 'u' << type_name.size() << type_name; \
break;

Function Documentation

◆ asTemplateName()

static TemplateName asTemplateName ( GlobalDecl  GD)
static

Definition at line 1006 of file ItaniumMangle.cpp.

References clang::GlobalDecl::getDecl().

◆ getLValueType()

static QualType getLValueType ( ASTContext Ctx,
const APValue LV 
)
static

◆ getParentOfLocalEntity()

static GlobalDecl getParentOfLocalEntity ( const DeclContext DC)
static

Definition at line 1835 of file ItaniumMangle.cpp.

References clang::Ctor_Complete, and clang::Dtor_Complete.

◆ getUnionInitName()

static IdentifierInfo * getUnionInitName ( SourceLocation  UnionLoc,
DiagnosticsEngine Diags,
const FieldDecl FD 
)
static

◆ hasMangledSubstitutionQualifiers()

static bool hasMangledSubstitutionQualifiers ( QualType  T)
static

Determine whether the given type has any qualifiers that are relevant for substitutions.

Definition at line 6739 of file ItaniumMangle.cpp.

References clang::Qualifiers::getCVRQualifiers(), clang::Qualifiers::hasAddressSpace(), clang::Qualifiers::hasUnaligned(), and clang::T.

◆ isParenthesizedADLCallee()

static bool isParenthesizedADLCallee ( const CallExpr call)
static

Look at the callee of the given call expression and determine if it's a parenthesized id-expression which would have triggered ADL otherwise.

Definition at line 4512 of file ItaniumMangle.cpp.

References clang::OverloadExpr::decls_begin(), clang::CallExpr::getCallee(), clang::OverloadExpr::getNumDecls(), clang::OverloadExpr::getQualifier(), clang::Expr::IgnoreParens(), and clang::UnresolvedLookupExpr::requiresADL().

◆ isTemplate()

static const GlobalDecl isTemplate ( GlobalDecl  GD,
const TemplateArgumentList *&  TemplateArgs 
)
static

◆ isTypeSubstitutable()

static bool isTypeSubstitutable ( Qualifiers  Quals,
const Type Ty,
ASTContext Ctx 
)
static

◆ isZeroInitialized()

static bool isZeroInitialized ( QualType  T,
const APValue V 
)
static

◆ mangleAArch64VectorBase()

static StringRef mangleAArch64VectorBase ( const BuiltinType EltType)
static

Definition at line 3827 of file ItaniumMangle.cpp.

References clang::BuiltinType::getKind().