28 using namespace clang;
44 assert(RT &&
"type of VarDecl is expected to be RecordType.");
45 assert(RT->
getDecl()->
isUnion() &&
"RecordType is expected to be a union.");
47 return FD->getIdentifier();
56 llvm::DenseMap<const Type *, unsigned> ManglingNumbers;
57 llvm::DenseMap<const IdentifierInfo *, unsigned> VarManglingNumbers;
58 llvm::DenseMap<const IdentifierInfo *, unsigned> TagManglingNumbers;
61 unsigned getManglingNumber(
const CXXMethodDecl *CallOperator)
override {
69 Context.getFunctionType(Context.VoidTy, Proto->
getParamTypes(), EPI);
74 unsigned getManglingNumber(
const BlockDecl *BD)
override {
75 const Type *Ty =
nullptr;
76 return ++ManglingNumbers[Ty];
79 unsigned getStaticLocalNumber(
const VarDecl *VD)
override {
84 unsigned getManglingNumber(
const VarDecl *VD,
unsigned)
override {
88 Identifier = findAnonymousUnionVarDeclName(*VD);
90 return ++VarManglingNumbers[Identifier];
93 unsigned getManglingNumber(
const TagDecl *TD,
unsigned)
override {
98 class ItaniumCXXABI :
public CXXABI {
102 ItaniumCXXABI(
ASTContext &Ctx) : Context(Ctx) { }
108 MemberPointerInfo MPI;
111 MPI.HasPadding =
false;
117 CallingConv getDefaultMethodCallConv(
bool isVariadic)
const override {
119 if (!isVariadic && T.isWindowsGNUEnvironment() &&
120 T.getArch() == llvm::Triple::x86)
140 getCopyConstructorForExceptionObject(
CXXRecordDecl *RD)
override {
147 void addTypedefNameForUnnamedTagDecl(
TagDecl *TD,
154 void addDeclaratorForUnnamedTagDecl(
TagDecl *TD,
161 std::unique_ptr<MangleNumberingContext>
162 createMangleNumberingContext()
const override {
163 return llvm::make_unique<ItaniumNumberingContext>();
169 return new ItaniumCXXABI(Ctx);
Defines the clang::ASTContext interface.
unsigned getTypeWidth(IntType T) const
Return the width (in bits) of the specified integer type enum.
A (possibly-)qualified type.
const ASTRecordLayout & getASTRecordLayout(const RecordDecl *D) const
Get or compute information about the layout of the specified record (struct/union/class) D...
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
C Language Family Type Representation.
The base class of the type hierarchy.
const TargetInfo & getTargetInfo() const
Represents a C++ constructor within a class.
VarDecl - An instance of this class is created to represent a variable declaration or definition...
const T * getAs() const
Member-template getAs<specific type>'.
Extra information about a function prototype.
IdentifierInfo * getIdentifier() const
getIdentifier - Get the identifier that names this declaration, if there is one.
uint64_t getPointerWidth(unsigned AddrSpace) const
Return the width of pointers on this target, for the specified address space.
One of these records is kept for each identifier that is lexed.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
ArrayRef< QualType > getParamTypes() const
FieldDecl - An instance of this class is created by Sema::ActOnField to represent a member of a struc...
CharUnits - This is an opaque type for sizes expressed in character units.
Keeps track of the mangled names of lambda expressions and block literals within a particular context...
CXXABI * CreateItaniumCXXABI(ASTContext &Ctx)
Creates an instance of a C++ ABI class.
Represents a prototype with parameter type info, e.g.
bool isDynamicClass() const
Represents a ValueDecl that came out of a declarator.
ASTRecordLayout - This class contains layout information for one RecordDecl, which is a struct/union/...
Exposes information about the current target.
BlockDecl - This represents a block literal declaration, which is like an unnamed FunctionDecl...
const FieldDecl * findFirstNamedDataMember() const
Finds the first data member which has a name.
const FunctionProtoType * T
const T * castAs() const
Member-template castAs<specific type>.
Implements C++ ABI-specific semantic analysis functions.
CallingConv
CallingConv - Specifies the calling convention that a function uses.
unsigned getTypeAlign(IntType T) const
Return the alignment (in bits) of the specified integer type enum.
RecordDecl * getDecl() const
IntType getPtrDiffType(unsigned AddrSpace) const
QualType getCanonicalType() const
TagDecl - Represents the declaration of a struct/union/class/enum.
ASTContext & getASTContext() const LLVM_READONLY
Represents a static or instance method of a struct/union/class.
Base class for declarations which introduce a typedef-name.
IntType
===-— Target Data Type Query Methods ----------------------------—===//
Dataflow Directional Tag Classes.
A pointer to member type per C++ 8.3.3 - Pointers to members.
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...
CharUnits toCharUnitsFromBits(int64_t BitSize) const
Convert a size in bits to a size in characters.
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
Represents a C++ struct/union/class.
bool isMemberFunctionPointer() const
Returns true if the member type (i.e.
CharUnits getNonVirtualSize() const
getNonVirtualSize - Get the non-virtual size (in chars) of an object, which is the size of the object...
Defines the clang::TargetInfo interface.