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; }
60 return (Off >= Begin && Off < End);
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>>;
134 bool hasVBPtrAtOffset(
uint32_t Off)
const;
135 void initializeChildren(
const PDBSymbol &Sym);
137 void addChildToLayout(std::unique_ptr<LayoutItemBase> Child);
142 UniquePtrVector<PDBSymbolFunc>
Funcs;
158 std::unique_ptr<PDBSymbolTypeBaseClass> Base);
165 std::unique_ptr<PDBSymbolTypeBaseClass>
Base;
172 explicit ClassLayout(std::unique_ptr<PDBSymbolTypeUDT> UDT);
175 uint32_t immediatePadding()
const override;
179 std::unique_ptr<PDBSymbolTypeUDT> OwnedStorage;
This file implements the BitVector class.
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.
LLVM_ABI BaseClassLayout(const UDTLayoutBase &Parent, uint32_t OffsetInParent, bool Elide, std::unique_ptr< PDBSymbolTypeBaseClass > Base)
bool isVirtualBase() const
const PDBSymbolTypeBaseClass & getBase() const
ClassLayout(const PDBSymbolTypeUDT &UDT)
const PDBSymbolTypeUDT & getClass() const
LLVM_ABI const PDBSymbolData & getDataMember()
LLVM_ABI DataMemberLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolData > DataMember)
LLVM_ABI bool hasUDTLayout() const
LLVM_ABI const ClassLayout & getUDTLayout() const
const PDBSymbol * getSymbol() const
virtual ~LayoutItemBase()=default
StringRef getName() 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
LayoutItemBase(const UDTLayoutBase *Parent, const PDBSymbol *Symbol, const std::string &Name, uint32_t OffsetInParent, uint32_t Size, bool IsElided)
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
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
UDTLayoutBase & operator=(UDTLayoutBase const &)=delete
ArrayRef< std::unique_ptr< PDBSymbolFunc > > funcs() const
UDTLayoutBase(UDTLayoutBase const &)=delete
std::vector< BaseClassLayout * > AllBases
UniquePtrVector< PDBSymbolFunc > Funcs
VTableLayoutItem * VTable
uint32_t directVirtualBaseCount() const
UniquePtrVector< LayoutItemBase > ChildStorage
ArrayRef< BaseClassLayout * > NonVirtualBases
UDTLayoutBase(const UDTLayoutBase *Parent, const PDBSymbol &Sym, const std::string &Name, uint32_t OffsetInParent, uint32_t Size, bool IsElided)
LLVM_ABI VBPtrLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolTypeBuiltin > Sym, uint32_t Offset, uint32_t Size)
bool isVBPtr() const override
LLVM_ABI VTableLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolTypeVTable > VTable)
uint32_t getElementSize() const
This is an optimization pass for GlobalISel generic memory operations.