class CodeGenVTables
Declaration
class CodeGenVTables { /* full declaration omitted */ };
Declared at: clang/lib/CodeGen/CGVTables.h:32
Member Variables
- private clang::CodeGen::CodeGenModule& CGM
- private clang::VTableContextBase* VTContext
- private clang::CodeGen::CodeGenVTables:: SubVTTIndiciesMapTy SubVTTIndicies
- SubVTTIndicies - Contains indices into the various sub-VTTs.
- private clang::CodeGen::CodeGenVTables:: SecondaryVirtualPointerIndicesMapTy SecondaryVirtualPointerIndices
- SecondaryVirtualPointerIndices - Contains the secondary virtual pointer indices.
- private llvm::Constant* PureVirtualFn = nullptr
- Cache for the pure virtual member call function.
- private llvm::Constant* DeletedVirtualFn = nullptr
- Cache for the deleted virtual member call function.
Method Overview
- public CodeGenVTables(clang::CodeGen::CodeGenModule & CGM)
- public void EmitThunks(clang::GlobalDecl GD)
- public void EmitVTTDefinition(llvm::GlobalVariable * VTT, llvm::GlobalVariable::LinkageTypes Linkage, const clang::CXXRecordDecl * RD)
- public void GenerateClassData(const clang::CXXRecordDecl * RD)
- public llvm::GlobalVariable * GenerateConstructionVTable(const clang::CXXRecordDecl * RD, const clang::BaseSubobject & Base, bool BaseIsVirtual, llvm::GlobalVariable::LinkageTypes Linkage, clang::CodeGen::CodeGenVTables::VTableAddressPointsMapTy & AddressPoints)
- public void GenerateRelativeVTableAlias(llvm::GlobalVariable * VTable, llvm::StringRef AliasNameRef)
- public llvm::GlobalVariable * GetAddrOfVTT(const clang::CXXRecordDecl * RD)
- private void addRelativeComponent(clang::CodeGen::ConstantArrayBuilder & builder, llvm::Constant * component, unsigned int vtableAddressPoint, bool vtableHasLocalLinkage, bool isCompleteDtor) const
- private void addVTableComponent(clang::CodeGen::ConstantArrayBuilder & builder, const clang::VTableLayout & layout, unsigned int componentIndex, llvm::Constant * rtti, unsigned int & nextVTableThunkIndex, unsigned int vtableAddressPoint, bool vtableHasLocalLinkage)
- public void createVTableInitializer(clang::CodeGen::ConstantStructBuilder & builder, const clang::VTableLayout & layout, llvm::Constant * rtti, bool vtableHasLocalLinkage)
- public clang::ItaniumVTableContext & getItaniumVTableContext()
- public clang::MicrosoftVTableContext & getMicrosoftVTableContext()
- private llvm::Function * getOrCreateRelativeStub(llvm::Function * func, llvm::GlobalValue::LinkageTypes stubLinkage, bool isCompleteDtor) const
- public uint64_t getSecondaryVirtualPointerIndex(const clang::CXXRecordDecl * RD, clang::BaseSubobject Base)
- public uint64_t getSubVTTIndex(const clang::CXXRecordDecl * RD, clang::BaseSubobject Base)
- private llvm::Type * getVTableComponentType() const
- public llvm::Type * getVTableType(const clang::VTableLayout & layout)
- public bool isVTableExternal(const clang::CXXRecordDecl * RD)
- private llvm::Constant * maybeEmitThunk(clang::GlobalDecl GD, const clang::ThunkInfo & ThunkAdjustments, bool ForVTable)
- private bool useRelativeLayout() const
Methods
¶CodeGenVTables(clang::CodeGen::CodeGenModule& CGM)
CodeGenVTables(clang::CodeGen::CodeGenModule& CGM)
Declared at: clang/lib/CodeGen/CGVTables.h:99
Parameters
¶void EmitThunks(clang::GlobalDecl GD)
void EmitThunks(clang::GlobalDecl GD)
Description
EmitThunks - Emit the associated thunks for the given global decl.
Declared at: clang/lib/CodeGen/CGVTables.h:136
Parameters
¶void EmitVTTDefinition(
llvm::GlobalVariable* VTT,
llvm::GlobalVariable::LinkageTypes Linkage,
const clang::CXXRecordDecl* RD)
void EmitVTTDefinition(
llvm::GlobalVariable* VTT,
llvm::GlobalVariable::LinkageTypes Linkage,
const clang::CXXRecordDecl* RD)
Description
EmitVTTDefinition - Emit the definition of the given vtable.
Declared at: clang/lib/CodeGen/CGVTables.h:131
Parameters
- llvm::GlobalVariable* VTT
- llvm::GlobalVariable::LinkageTypes Linkage
- const clang::CXXRecordDecl* RD
¶void GenerateClassData(
const clang::CXXRecordDecl* RD)
void GenerateClassData(
const clang::CXXRecordDecl* RD)
Description
GenerateClassData - Generate all the class data required to be generated upon definition of a KeyFunction. This includes the vtable, the RTTI data structure (if RTTI is enabled) and the VTT (if the class has virtual bases).
Declared at: clang/lib/CodeGen/CGVTables.h:142
Parameters
- const clang::CXXRecordDecl* RD
¶llvm::GlobalVariable* GenerateConstructionVTable(
const clang::CXXRecordDecl* RD,
const clang::BaseSubobject& Base,
bool BaseIsVirtual,
llvm::GlobalVariable::LinkageTypes Linkage,
clang::CodeGen::CodeGenVTables::
VTableAddressPointsMapTy& AddressPoints)
llvm::GlobalVariable* GenerateConstructionVTable(
const clang::CXXRecordDecl* RD,
const clang::BaseSubobject& Base,
bool BaseIsVirtual,
llvm::GlobalVariable::LinkageTypes Linkage,
clang::CodeGen::CodeGenVTables::
VTableAddressPointsMapTy& AddressPoints)
Description
GenerateConstructionVTable - Generate a construction vtable for the given base subobject.
Declared at: clang/lib/CodeGen/CGVTables.h:121
Parameters
- const clang::CXXRecordDecl* RD
- const clang::BaseSubobject& Base
- bool BaseIsVirtual
- llvm::GlobalVariable::LinkageTypes Linkage
- clang::CodeGen::CodeGenVTables:: VTableAddressPointsMapTy& AddressPoints
¶void GenerateRelativeVTableAlias(
llvm::GlobalVariable* VTable,
llvm::StringRef AliasNameRef)
void GenerateRelativeVTableAlias(
llvm::GlobalVariable* VTable,
llvm::StringRef AliasNameRef)
Description
Generate a public facing alias for the vtable and make the vtable either hidden or private. The alias will have the original linkage and visibility of the vtable. This is used for cases under the relative vtables ABI when a vtable may not be dso_local.
Declared at: clang/lib/CodeGen/CGVTables.h:155
Parameters
- llvm::GlobalVariable* VTable
- llvm::StringRef AliasNameRef
¶llvm::GlobalVariable* GetAddrOfVTT(
const clang::CXXRecordDecl* RD)
llvm::GlobalVariable* GetAddrOfVTT(
const clang::CXXRecordDecl* RD)
Description
GetAddrOfVTT - Get the address of the VTT for the given record decl.
Declared at: clang/lib/CodeGen/CGVTables.h:128
Parameters
- const clang::CXXRecordDecl* RD
¶void addRelativeComponent(
clang::CodeGen::ConstantArrayBuilder& builder,
llvm::Constant* component,
unsigned int vtableAddressPoint,
bool vtableHasLocalLinkage,
bool isCompleteDtor) const
void addRelativeComponent(
clang::CodeGen::ConstantArrayBuilder& builder,
llvm::Constant* component,
unsigned int vtableAddressPoint,
bool vtableHasLocalLinkage,
bool isCompleteDtor) const
Description
Add a 32-bit offset to a component relative to the vtable when using the relative vtables ABI. The array builder points to the start of the vtable.
Declared at: clang/lib/CodeGen/CGVTables.h:72
Parameters
- clang::CodeGen::ConstantArrayBuilder& builder
- llvm::Constant* component
- unsigned int vtableAddressPoint
- bool vtableHasLocalLinkage
- bool isCompleteDtor
¶void addVTableComponent(
clang::CodeGen::ConstantArrayBuilder& builder,
const clang::VTableLayout& layout,
unsigned int componentIndex,
llvm::Constant* rtti,
unsigned int& nextVTableThunkIndex,
unsigned int vtableAddressPoint,
bool vtableHasLocalLinkage)
void addVTableComponent(
clang::CodeGen::ConstantArrayBuilder& builder,
const clang::VTableLayout& layout,
unsigned int componentIndex,
llvm::Constant* rtti,
unsigned int& nextVTableThunkIndex,
unsigned int vtableAddressPoint,
bool vtableHasLocalLinkage)
Declared at: clang/lib/CodeGen/CGVTables.h:64
Parameters
- clang::CodeGen::ConstantArrayBuilder& builder
- const clang::VTableLayout& layout
- unsigned int componentIndex
- llvm::Constant* rtti
- unsigned int& nextVTableThunkIndex
- unsigned int vtableAddressPoint
- bool vtableHasLocalLinkage
¶void createVTableInitializer(
clang::CodeGen::ConstantStructBuilder&
builder,
const clang::VTableLayout& layout,
llvm::Constant* rtti,
bool vtableHasLocalLinkage)
void createVTableInitializer(
clang::CodeGen::ConstantStructBuilder&
builder,
const clang::VTableLayout& layout,
llvm::Constant* rtti,
bool vtableHasLocalLinkage)
Description
Add vtable components for the given vtable layout to the given global initializer.
Declared at: clang/lib/CodeGen/CGVTables.h:95
Parameters
- clang::CodeGen::ConstantStructBuilder& builder
- const clang::VTableLayout& layout
- llvm::Constant* rtti
- bool vtableHasLocalLinkage
¶clang::ItaniumVTableContext&
getItaniumVTableContext()
clang::ItaniumVTableContext&
getItaniumVTableContext()
Declared at: clang/lib/CodeGen/CGVTables.h:101
¶clang::MicrosoftVTableContext&
getMicrosoftVTableContext()
clang::MicrosoftVTableContext&
getMicrosoftVTableContext()
Declared at: clang/lib/CodeGen/CGVTables.h:105
¶llvm::Function* getOrCreateRelativeStub(
llvm::Function* func,
llvm::GlobalValue::LinkageTypes stubLinkage,
bool isCompleteDtor) const
llvm::Function* getOrCreateRelativeStub(
llvm::Function* func,
llvm::GlobalValue::LinkageTypes stubLinkage,
bool isCompleteDtor) const
Description
Create a dso_local stub that will be used for a relative reference in the relative vtable layout. This stub will just be a tail call to the original function and propagate any function attributes from the original. If the original function is already dso_local, the original is returned instead and a stub is not created.
Declared at: clang/lib/CodeGen/CGVTables.h:84
Parameters
- llvm::Function* func
- llvm::GlobalValue::LinkageTypes stubLinkage
- bool isCompleteDtor
¶uint64_t getSecondaryVirtualPointerIndex(
const clang::CXXRecordDecl* RD,
clang::BaseSubobject Base)
uint64_t getSecondaryVirtualPointerIndex(
const clang::CXXRecordDecl* RD,
clang::BaseSubobject Base)
Description
getSecondaryVirtualPointerIndex - Return the index in the VTT where the virtual pointer for the given subobject is located.
Declared at: clang/lib/CodeGen/CGVTables.h:115
Parameters
- const clang::CXXRecordDecl* RD
- clang::BaseSubobject Base
¶uint64_t getSubVTTIndex(
const clang::CXXRecordDecl* RD,
clang::BaseSubobject Base)
uint64_t getSubVTTIndex(
const clang::CXXRecordDecl* RD,
clang::BaseSubobject Base)
Description
getSubVTTIndex - Return the index of the sub-VTT for the base class of the given record decl.
Declared at: clang/lib/CodeGen/CGVTables.h:111
Parameters
- const clang::CXXRecordDecl* RD
- clang::BaseSubobject Base
¶llvm::Type* getVTableComponentType() const
llvm::Type* getVTableComponentType() const
Declared at: clang/lib/CodeGen/CGVTables.h:90
¶llvm::Type* getVTableType(
const clang::VTableLayout& layout)
llvm::Type* getVTableType(
const clang::VTableLayout& layout)
Description
Returns the type of a vtable with the given layout. Normally a struct of arrays of pointers, with one struct element for each vtable in the vtable group.
Declared at: clang/lib/CodeGen/CGVTables.h:149
Parameters
- const clang::VTableLayout& layout
¶bool isVTableExternal(
const clang::CXXRecordDecl* RD)
bool isVTableExternal(
const clang::CXXRecordDecl* RD)
Declared at: clang/lib/CodeGen/CGVTables.h:144
Parameters
- const clang::CXXRecordDecl* RD
¶llvm::Constant* maybeEmitThunk(
clang::GlobalDecl GD,
const clang::ThunkInfo& ThunkAdjustments,
bool ForVTable)
llvm::Constant* maybeEmitThunk(
clang::GlobalDecl GD,
const clang::ThunkInfo& ThunkAdjustments,
bool ForVTable)
Description
Get the address of a thunk and emit it if necessary.
Declared at: clang/lib/CodeGen/CGVTables.h:60
Parameters
- clang::GlobalDecl GD
- const clang::ThunkInfo& ThunkAdjustments
- bool ForVTable
¶bool useRelativeLayout() const
bool useRelativeLayout() const
Declared at: clang/lib/CodeGen/CGVTables.h:88