9#ifndef LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
10#define LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
52 virtual bool isVBPtr()
const {
return false; }
57 return (Off >= Begin && Off <
End);
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;
This file implements the BitVector class.
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.
The instances of the Type class are immutable: once they are created, they are never changed.
bool isVirtualBase() const
const PDBSymbolTypeBaseClass & getBase() const
uint32_t immediatePadding() const override
const PDBSymbolTypeUDT & getClass() const
ClassLayout(ClassLayout &&Other)=default
const PDBSymbolData & getDataMember()
bool hasUDTLayout() const
const ClassLayout & getUDTLayout() const
const PDBSymbol * getSymbol() const
virtual ~LayoutItemBase()=default
StringRef getName() const
virtual uint32_t tailPadding() const
uint32_t deepPaddingSize() const
const BitVector & usedBytes() const
virtual bool isVBPtr() const
uint32_t getOffsetInParent() const
uint32_t containsOffset(uint32_t Off) const
uint32_t getLayoutSize() const
virtual uint32_t immediatePadding() const
const UDTLayoutBase * getParent() const
const UDTLayoutBase * Parent
PDBSymbol defines the base of the inheritance hierarchy for concrete symbol types (e....
ArrayRef< BaseClassLayout * > VirtualBases
ArrayRef< BaseClassLayout * > virtual_bases() const
ArrayRef< BaseClassLayout * > bases() const
bool hasVBPtrAtOffset(uint32_t Off) const
ArrayRef< BaseClassLayout * > regular_bases() const
uint32_t DirectVBaseCount
ArrayRef< std::unique_ptr< PDBSymbol > > other_items() const
std::vector< LayoutItemBase * > LayoutItems
ArrayRef< LayoutItemBase * > layout_items() const
UniquePtrVector< PDBSymbol > Other
uint32_t tailPadding() const override
ArrayRef< std::unique_ptr< PDBSymbolFunc > > funcs() const
void addChildToLayout(std::unique_ptr< LayoutItemBase > Child)
std::vector< BaseClassLayout * > AllBases
UniquePtrVector< PDBSymbolFunc > Funcs
VTableLayoutItem * VTable
void initializeChildren(const PDBSymbol &Sym)
uint32_t directVirtualBaseCount() const
UniquePtrVector< LayoutItemBase > ChildStorage
ArrayRef< BaseClassLayout * > NonVirtualBases
bool isVBPtr() const override
uint32_t getElementSize() const
This is an optimization pass for GlobalISel generic memory operations.