LLVM: include/llvm/DebugInfo/PDB/UDTLayout.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
10#define LLVM_DEBUGINFO_PDB_UDTLAYOUT_H
11
24#include
25#include
26#include
27#include
28
29namespace llvm {
30namespace pdb {
31
35
37public:
42
45 virtual uint32_t tailPadding() const;
46
55 virtual bool isVBPtr() const { return false; }
56
60 return (Off >= Begin && Off < End);
61 }
62
63protected:
72};
73
75public:
77 std::unique_ptr Sym,
79
80 bool isVBPtr() const override { return true; }
81
82private:
83 std::unique_ptr Type;
84};
85
87public:
89 std::unique_ptr DataMember);
90
94
95private:
96 std::unique_ptr DataMember;
97 std::unique_ptr UdtLayout;
98};
99
101public:
103 std::unique_ptr VTable);
104
106
107private:
109 std::unique_ptr VTable;
110};
111
113 template using UniquePtrVector = std::vector<std::unique_ptr>;
114
115public:
119
120
123
132
133protected:
134 bool hasVBPtrAtOffset(uint32_t Off) const;
135 void initializeChildren(const PDBSymbol &Sym);
136
137 void addChildToLayout(std::unique_ptr Child);
138
140
145
149
152};
153
155public:
157 bool Elide,
158 std::unique_ptr Base);
159
163
164private:
165 std::unique_ptr Base;
166 bool IsVirtualBase;
167};
168
170public:
172 explicit ClassLayout(std::unique_ptr UDT);
173
175 uint32_t immediatePadding() const override;
176
177private:
179 std::unique_ptr OwnedStorage;
181};
182
183}
184}
185
186#endif
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.
Definition UDTLayout.h:154
bool isEmptyBase()
Definition UDTLayout.h:162
LLVM_ABI BaseClassLayout(const UDTLayoutBase &Parent, uint32_t OffsetInParent, bool Elide, std::unique_ptr< PDBSymbolTypeBaseClass > Base)
bool isVirtualBase() const
Definition UDTLayout.h:161
const PDBSymbolTypeBaseClass & getBase() const
Definition UDTLayout.h:160
Definition UDTLayout.h:169
ClassLayout(const PDBSymbolTypeUDT &UDT)
const PDBSymbolTypeUDT & getClass() const
Definition UDTLayout.h:174
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
Definition UDTLayout.h:52
uint32_t OffsetInParent
Definition UDTLayout.h:68
uint32_t SizeOf
Definition UDTLayout.h:69
virtual ~LayoutItemBase()=default
StringRef getName() const
Definition UDTLayout.h:48
uint32_t getSize() const
Definition UDTLayout.h:50
uint32_t deepPaddingSize() const
const BitVector & usedBytes() const
Definition UDTLayout.h:53
virtual bool isVBPtr() const
Definition UDTLayout.h:55
uint32_t getOffsetInParent() const
Definition UDTLayout.h:49
uint32_t containsOffset(uint32_t Off) const
Definition UDTLayout.h:57
uint32_t getLayoutSize() const
Definition UDTLayout.h:51
BitVector UsedBytes
Definition UDTLayout.h:66
virtual uint32_t immediatePadding() const
Definition UDTLayout.h:44
LayoutItemBase(const UDTLayoutBase *Parent, const PDBSymbol *Symbol, const std::string &Name, uint32_t OffsetInParent, uint32_t Size, bool IsElided)
std::string Name
Definition UDTLayout.h:67
const UDTLayoutBase * getParent() const
Definition UDTLayout.h:47
bool isElided() const
Definition UDTLayout.h:54
const UDTLayoutBase * Parent
Definition UDTLayout.h:65
bool IsElided
Definition UDTLayout.h:71
const PDBSymbol * Symbol
Definition UDTLayout.h:64
uint32_t LayoutSize
Definition UDTLayout.h:70
PDBSymbol defines the base of the inheritance hierarchy for concrete symbol types (e....
Definition UDTLayout.h:112
ArrayRef< BaseClassLayout * > VirtualBases
Definition UDTLayout.h:148
ArrayRef< BaseClassLayout * > virtual_bases() const
Definition UDTLayout.h:128
ArrayRef< BaseClassLayout * > bases() const
Definition UDTLayout.h:126
ArrayRef< BaseClassLayout * > regular_bases() const
Definition UDTLayout.h:127
uint32_t DirectVBaseCount
Definition UDTLayout.h:139
ArrayRef< std::unique_ptr< PDBSymbol > > other_items() const
Definition UDTLayout.h:131
std::vector< LayoutItemBase * > LayoutItems
Definition UDTLayout.h:144
ArrayRef< LayoutItemBase * > layout_items() const
Definition UDTLayout.h:125
UniquePtrVector< PDBSymbol > Other
Definition UDTLayout.h:141
uint32_t tailPadding() const override
UDTLayoutBase & operator=(UDTLayoutBase const &)=delete
ArrayRef< std::unique_ptr< PDBSymbolFunc > > funcs() const
Definition UDTLayout.h:130
UDTLayoutBase(UDTLayoutBase const &)=delete
std::vector< BaseClassLayout * > AllBases
Definition UDTLayout.h:146
UniquePtrVector< PDBSymbolFunc > Funcs
Definition UDTLayout.h:142
VTableLayoutItem * VTable
Definition UDTLayout.h:150
uint32_t directVirtualBaseCount() const
Definition UDTLayout.h:129
UniquePtrVector< LayoutItemBase > ChildStorage
Definition UDTLayout.h:143
ArrayRef< BaseClassLayout * > NonVirtualBases
Definition UDTLayout.h:147
UDTLayoutBase(const UDTLayoutBase *Parent, const PDBSymbol &Sym, const std::string &Name, uint32_t OffsetInParent, uint32_t Size, bool IsElided)
VBPtrLayoutItem * VBPtr
Definition UDTLayout.h:151
Definition UDTLayout.h:74
LLVM_ABI VBPtrLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolTypeBuiltin > Sym, uint32_t Offset, uint32_t Size)
bool isVBPtr() const override
Definition UDTLayout.h:80
Definition UDTLayout.h:100
LLVM_ABI VTableLayoutItem(const UDTLayoutBase &Parent, std::unique_ptr< PDBSymbolTypeVTable > VTable)
uint32_t getElementSize() const
Definition UDTLayout.h:105
This is an optimization pass for GlobalISel generic memory operations.