9#ifndef LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
10#define LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
45 virtual uint32_t tailPadding()
const;
55 virtual bool isVBPtr()
const {
return false; }
58 uint32_t Begin = getOffsetInParent();
60 return (Off >= Begin && Off <
End);
71 bool IsElided =
false;
77 std::unique_ptr<PDBSymbolTypeBuiltin>
Sym,
80 bool isVBPtr()
const override {
return true; }
83 std::unique_ptr<PDBSymbolTypeBuiltin>
Type;
89 std::unique_ptr<PDBSymbolData> DataMember);
96 std::unique_ptr<PDBSymbolData> DataMember;
97 std::unique_ptr<ClassLayout> UdtLayout;
103 std::unique_ptr<PDBSymbolTypeVTable> VTable);
109 std::unique_ptr<PDBSymbolTypeVTable>
VTable;
113 template <
typename T>
using UniquePtrVector = std::vector<std::unique_ptr<T>>;
124 uint32_t tailPadding()
const override;
134 bool hasVBPtrAtOffset(
uint32_t Off)
const;
137 void addChildToLayout(std::unique_ptr<LayoutItemBase> Child);
142 UniquePtrVector<PDBSymbolFunc>
Funcs;
158 std::unique_ptr<PDBSymbolTypeBaseClass> Base);
165 std::unique_ptr<PDBSymbolTypeBaseClass>
Base;
175 uint32_t immediatePadding()
const override;
179 std::unique_ptr<PDBSymbolTypeUDT> OwnedStorage;
This file implements the BitVector class.
std::optional< std::vector< StOtherPiece > > Other
static unsigned getSize(unsigned Kind)
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
const PDBSymbolTypeUDT & getClass() const
LLVM_ABI const PDBSymbolData & getDataMember()
LLVM_ABI bool hasUDTLayout() const
LLVM_ABI const ClassLayout & getUDTLayout() const
const PDBSymbol * getSymbol() const
virtual ~LayoutItemBase()=default
StringRef getName() 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
ArrayRef< BaseClassLayout * > regular_bases() const
ArrayRef< std::unique_ptr< PDBSymbol > > other_items() const
std::vector< LayoutItemBase * > LayoutItems
ArrayRef< LayoutItemBase * > layout_items() const
UniquePtrVector< PDBSymbol > Other
UDTLayoutBase & operator=(UDTLayoutBase const &)=delete
ArrayRef< std::unique_ptr< PDBSymbolFunc > > funcs() const
UDTLayoutBase(UDTLayoutBase const &)=delete
std::vector< BaseClassLayout * > AllBases
UniquePtrVector< PDBSymbolFunc > Funcs
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.