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

141 UniquePtrVector Other;

142 UniquePtrVector Funcs;

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.