Go to the documentation of this file.
9 #ifndef LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
10 #define LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
29 class BaseClassLayout;
52 virtual bool isVBPtr()
const {
return false; }
57 return (Off >= Begin && Off < End);
74 std::unique_ptr<PDBSymbolTypeBuiltin> Sym,
uint32_t Offset,
77 bool isVBPtr()
const override {
return true; }
80 std::unique_ptr<PDBSymbolTypeBuiltin>
Type;
86 std::unique_ptr<PDBSymbolData> DataMember);
93 std::unique_ptr<PDBSymbolData> DataMember;
94 std::unique_ptr<ClassLayout> UdtLayout;
100 std::unique_ptr<PDBSymbolTypeVTable> VTable);
106 std::unique_ptr<PDBSymbolTypeVTable>
VTable;
110 template <
typename T>
using UniquePtrVector = std::vector<std::unique_ptr<T>>;
135 UniquePtrVector<PDBSymbolFunc>
Funcs;
150 bool Elide, std::unique_ptr<PDBSymbolTypeBaseClass> Base);
157 std::unique_ptr<PDBSymbolTypeBaseClass>
Base;
173 std::unique_ptr<PDBSymbolTypeUDT> OwnedStorage;
180 #endif // LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
const PDBSymbolTypeUDT & getClass() const
This is an optimization pass for GlobalISel generic memory operations.
bool isVBPtr() const override
ClassLayout(const PDBSymbolTypeUDT &UDT)
const ClassLayout & getUDTLayout() const
ArrayRef< LayoutItemBase * > layout_items() const
virtual uint32_t tailPadding() const
uint32_t getLayoutSize() const
The instances of the Type class are immutable: once they are created, they are never changed.
UDTLayoutBase(const UDTLayoutBase *Parent, const PDBSymbol &Sym, const std::string &Name, uint32_t OffsetInParent, uint32_t Size, bool IsElided)
ArrayRef< BaseClassLayout * > regular_bases() const
std::vector< BaseClassLayout * > AllBases
ArrayRef< BaseClassLayout * > virtual_bases() const
uint32_t deepPaddingSize() const
uint32_t tailPadding() const override
StringRef getName() const
VBPtrLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolTypeBuiltin > Sym, uint32_t Offset, uint32_t Size)
VTableLayoutItem * VTable
const PDBSymbolData & getDataMember()
PDBSymbol defines the base of the inheritance hierarchy for concrete symbol types (e....
ArrayRef< BaseClassLayout * > NonVirtualBases
uint32_t directVirtualBaseCount() const
virtual ~LayoutItemBase()=default
ArrayRef< std::unique_ptr< PDBSymbolFunc > > funcs() const
ArrayRef< std::unique_ptr< PDBSymbol > > other_items() const
std::vector< LayoutItemBase * > LayoutItems
DataMemberLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolData > DataMember)
virtual uint32_t immediatePadding() const
ArrayRef< BaseClassLayout * > VirtualBases
uint32_t getOffsetInParent() const
const BitVector & usedBytes() const
bool hasVBPtrAtOffset(uint32_t Off) const
uint32_t DirectVBaseCount
virtual bool isVBPtr() const
uint32_t containsOffset(uint32_t Off) const
UniquePtrVector< PDBSymbol > Other
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
StringRef - Represent a constant reference to a string, i.e.
UniquePtrVector< PDBSymbolFunc > Funcs
uint32_t immediatePadding() const override
void addChildToLayout(std::unique_ptr< LayoutItemBase > Child)
const PDBSymbol * getSymbol() const
BaseClassLayout(const UDTLayoutBase &Parent, uint32_t OffsetInParent, bool Elide, std::unique_ptr< PDBSymbolTypeBaseClass > Base)
LayoutItemBase(const UDTLayoutBase *Parent, const PDBSymbol *Symbol, const std::string &Name, uint32_t OffsetInParent, uint32_t Size, bool IsElided)
void initializeChildren(const PDBSymbol &Sym)
ArrayRef< BaseClassLayout * > bases() const
bool hasUDTLayout() const
bool isVirtualBase() const
const PDBSymbolTypeBaseClass & getBase() const
UniquePtrVector< LayoutItemBase > ChildStorage
uint32_t getElementSize() const
const UDTLayoutBase * getParent() const
const UDTLayoutBase * Parent
VTableLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolTypeVTable > VTable)