LLVM  16.0.0git
NativeTypeEnum.cpp
Go to the documentation of this file.
1 //===- NativeTypeEnum.cpp - info about enum type ----------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
10 
21 
22 #include <cassert>
23 #include <optional>
24 
25 using namespace llvm;
26 using namespace llvm::codeview;
27 using namespace llvm::pdb;
28 
29 namespace {
30 // Yea, this is a pretty terrible class name. But if we have an enum:
31 //
32 // enum Foo {
33 // A,
34 // B
35 // };
36 //
37 // then A and B are the "enumerators" of the "enum" Foo. And we need
38 // to enumerate them.
39 class NativeEnumEnumEnumerators : public IPDBEnumSymbols, TypeVisitorCallbacks {
40 public:
41  NativeEnumEnumEnumerators(NativeSession &Session,
42  const NativeTypeEnum &ClassParent);
43 
44  uint32_t getChildCount() const override;
45  std::unique_ptr<PDBSymbol> getChildAtIndex(uint32_t Index) const override;
46  std::unique_ptr<PDBSymbol> getNext() override;
47  void reset() override;
48 
49 private:
51  EnumeratorRecord &Record) override;
53  ListContinuationRecord &Record) override;
54 
55  NativeSession &Session;
57  std::vector<EnumeratorRecord> Enumerators;
58  std::optional<TypeIndex> ContinuationIndex;
59  uint32_t Index = 0;
60 };
61 } // namespace
62 
63 NativeEnumEnumEnumerators::NativeEnumEnumEnumerators(
64  NativeSession &Session, const NativeTypeEnum &ClassParent)
65  : Session(Session), ClassParent(ClassParent) {
68 
69  ContinuationIndex = ClassParent.getEnumRecord().FieldList;
70  while (ContinuationIndex) {
71  CVType FieldListCVT = Types.getType(*ContinuationIndex);
72  assert(FieldListCVT.kind() == LF_FIELDLIST);
73  ContinuationIndex.reset();
75  cantFail(TypeDeserializer::deserializeAs<FieldListRecord>(FieldListCVT,
76  FieldList));
78  }
79 }
80 
83  Enumerators.push_back(Record);
84  return Error::success();
85 }
86 
89  ContinuationIndex = Record.ContinuationIndex;
90  return Error::success();
91 }
92 
93 uint32_t NativeEnumEnumEnumerators::getChildCount() const {
94  return Enumerators.size();
95 }
96 
97 std::unique_ptr<PDBSymbol>
98 NativeEnumEnumEnumerators::getChildAtIndex(uint32_t Index) const {
99  if (Index >= getChildCount())
100  return nullptr;
101 
102  SymIndexId Id = Session.getSymbolCache()
104  ClassParent.getEnumRecord().FieldList, Index,
105  ClassParent, Enumerators[Index]);
106  return Session.getSymbolCache().getSymbolById(Id);
107 }
108 
109 std::unique_ptr<PDBSymbol> NativeEnumEnumEnumerators::getNext() {
110  if (Index >= getChildCount())
111  return nullptr;
112 
113  return getChildAtIndex(Index++);
114 }
115 
116 void NativeEnumEnumEnumerators::reset() { Index = 0; }
117 
120  : NativeRawSymbol(Session, PDB_SymType::Enum, Id), Index(Index),
121  Record(std::move(Record)) {}
122 
124  NativeTypeEnum &UnmodifiedType,
125  codeview::ModifierRecord Modifier)
126  : NativeRawSymbol(Session, PDB_SymType::Enum, Id),
127  UnmodifiedType(&UnmodifiedType), Modifiers(std::move(Modifier)) {}
128 
130 
131 void NativeTypeEnum::dump(raw_ostream &OS, int Indent,
132  PdbSymbolIdField ShowIdFields,
133  PdbSymbolIdField RecurseIdFields) const {
134  NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields);
135 
136  dumpSymbolField(OS, "baseType", static_cast<uint32_t>(getBuiltinType()),
137  Indent);
138  dumpSymbolIdField(OS, "lexicalParentId", 0, Indent, Session,
139  PdbSymbolIdField::LexicalParent, ShowIdFields,
140  RecurseIdFields);
141  dumpSymbolField(OS, "name", getName(), Indent);
142  dumpSymbolIdField(OS, "typeId", getTypeId(), Indent, Session,
143  PdbSymbolIdField::Type, ShowIdFields, RecurseIdFields);
144  if (Modifiers)
145  dumpSymbolIdField(OS, "unmodifiedTypeId", getUnmodifiedTypeId(), Indent,
147  RecurseIdFields);
148  dumpSymbolField(OS, "length", getLength(), Indent);
149  dumpSymbolField(OS, "constructor", hasConstructor(), Indent);
150  dumpSymbolField(OS, "constType", isConstType(), Indent);
151  dumpSymbolField(OS, "hasAssignmentOperator", hasAssignmentOperator(), Indent);
152  dumpSymbolField(OS, "hasCastOperator", hasCastOperator(), Indent);
153  dumpSymbolField(OS, "hasNestedTypes", hasNestedTypes(), Indent);
154  dumpSymbolField(OS, "overloadedOperator", hasOverloadedOperator(), Indent);
155  dumpSymbolField(OS, "isInterfaceUdt", isInterfaceUdt(), Indent);
156  dumpSymbolField(OS, "intrinsic", isIntrinsic(), Indent);
157  dumpSymbolField(OS, "nested", isNested(), Indent);
158  dumpSymbolField(OS, "packed", isPacked(), Indent);
159  dumpSymbolField(OS, "isRefUdt", isRefUdt(), Indent);
160  dumpSymbolField(OS, "scoped", isScoped(), Indent);
161  dumpSymbolField(OS, "unalignedType", isUnalignedType(), Indent);
162  dumpSymbolField(OS, "isValueUdt", isValueUdt(), Indent);
163  dumpSymbolField(OS, "volatileType", isVolatileType(), Indent);
164 }
165 
166 std::unique_ptr<IPDBEnumSymbols>
168  if (Type != PDB_SymType::Data)
169  return std::make_unique<NullEnumerator<PDBSymbol>>();
170 
171  const NativeTypeEnum *ClassParent = nullptr;
172  if (!Modifiers)
173  ClassParent = this;
174  else
176  return std::make_unique<NativeEnumEnumEnumerators>(Session, *ClassParent);
177 }
178 
180 
182  if (UnmodifiedType)
183  return UnmodifiedType->getBuiltinType();
184 
185  Session.getSymbolCache().findSymbolByTypeIndex(Record->getUnderlyingType());
186 
187  codeview::TypeIndex Underlying = Record->getUnderlyingType();
188 
189  // This indicates a corrupt record.
190  if (!Underlying.isSimple() ||
191  Underlying.getSimpleMode() != SimpleTypeMode::Direct) {
192  return PDB_BuiltinType::None;
193  }
194 
195  switch (Underlying.getSimpleKind()) {
196  case SimpleTypeKind::Boolean128:
197  case SimpleTypeKind::Boolean64:
198  case SimpleTypeKind::Boolean32:
199  case SimpleTypeKind::Boolean16:
200  case SimpleTypeKind::Boolean8:
201  return PDB_BuiltinType::Bool;
202  case SimpleTypeKind::NarrowCharacter:
203  case SimpleTypeKind::UnsignedCharacter:
204  case SimpleTypeKind::SignedCharacter:
205  return PDB_BuiltinType::Char;
206  case SimpleTypeKind::WideCharacter:
208  case SimpleTypeKind::Character16:
210  case SimpleTypeKind::Character32:
212  case SimpleTypeKind::Character8:
213  return PDB_BuiltinType::Char8;
214  case SimpleTypeKind::Int128:
215  case SimpleTypeKind::Int128Oct:
217  case SimpleTypeKind::Int16Short:
219  case SimpleTypeKind::Int32Long:
221  case SimpleTypeKind::Int64Quad:
222  return PDB_BuiltinType::Int;
223  case SimpleTypeKind::UInt128:
224  case SimpleTypeKind::UInt128Oct:
226  case SimpleTypeKind::UInt16Short:
228  case SimpleTypeKind::UInt32Long:
230  case SimpleTypeKind::UInt64Quad:
231  return PDB_BuiltinType::UInt;
232  case SimpleTypeKind::HResult:
234  case SimpleTypeKind::Complex16:
235  case SimpleTypeKind::Complex32:
236  case SimpleTypeKind::Complex32PartialPrecision:
237  case SimpleTypeKind::Complex64:
238  case SimpleTypeKind::Complex80:
239  case SimpleTypeKind::Complex128:
241  case SimpleTypeKind::Float16:
242  case SimpleTypeKind::Float32:
243  case SimpleTypeKind::Float32PartialPrecision:
244  case SimpleTypeKind::Float48:
245  case SimpleTypeKind::Float64:
246  case SimpleTypeKind::Float80:
247  case SimpleTypeKind::Float128:
248  return PDB_BuiltinType::Float;
249  default:
250  return PDB_BuiltinType::None;
251  }
252  llvm_unreachable("Unreachable");
253 }
254 
257 }
258 
260  if (UnmodifiedType)
261  return UnmodifiedType->hasConstructor();
262 
263  return bool(Record->getOptions() &
265 }
266 
268  if (UnmodifiedType)
270 
271  return bool(Record->getOptions() &
273 }
274 
276  if (UnmodifiedType)
277  return UnmodifiedType->hasNestedTypes();
278 
279  return bool(Record->getOptions() &
281 }
282 
284  if (UnmodifiedType)
285  return UnmodifiedType->isIntrinsic();
286 
287  return bool(Record->getOptions() & codeview::ClassOptions::Intrinsic);
288 }
289 
291  if (UnmodifiedType)
293 
294  return bool(Record->getOptions() &
296 }
297 
299  if (UnmodifiedType)
300  return UnmodifiedType->getLength();
301 
303  Record->getUnderlyingType());
304  const auto UnderlyingType =
306  return UnderlyingType ? UnderlyingType->getLength() : 0;
307 }
308 
309 std::string NativeTypeEnum::getName() const {
310  if (UnmodifiedType)
311  return UnmodifiedType->getName();
312 
313  return std::string(Record->getName());
314 }
315 
317  if (UnmodifiedType)
318  return UnmodifiedType->isNested();
319 
320  return bool(Record->getOptions() & codeview::ClassOptions::Nested);
321 }
322 
324  if (UnmodifiedType)
326 
327  return bool(Record->getOptions() &
329 }
330 
332  if (UnmodifiedType)
333  return UnmodifiedType->isPacked();
334 
335  return bool(Record->getOptions() & codeview::ClassOptions::Packed);
336 }
337 
339  if (UnmodifiedType)
340  return UnmodifiedType->isScoped();
341 
342  return bool(Record->getOptions() & codeview::ClassOptions::Scoped);
343 }
344 
346  if (UnmodifiedType)
347  return UnmodifiedType->getTypeId();
348 
350  Record->getUnderlyingType());
351 }
352 
353 bool NativeTypeEnum::isRefUdt() const { return false; }
354 
355 bool NativeTypeEnum::isValueUdt() const { return false; }
356 
357 bool NativeTypeEnum::isInterfaceUdt() const { return false; }
358 
360  if (!Modifiers)
361  return false;
362  return ((Modifiers->getModifiers() & ModifierOptions::Const) !=
364 }
365 
367  if (!Modifiers)
368  return false;
369  return ((Modifiers->getModifiers() & ModifierOptions::Volatile) !=
371 }
372 
374  if (!Modifiers)
375  return false;
376  return ((Modifiers->getModifiers() & ModifierOptions::Unaligned) !=
378 }
379 
381  if (UnmodifiedType)
383 
385  getTypeId());
386 }
llvm::pdb::NativeTypeEnum::isVolatileType
bool isVolatileType() const override
Definition: NativeTypeEnum.cpp:366
llvm::pdb::NativeTypeEnum::getSymTag
PDB_SymType getSymTag() const override
Definition: NativeTypeEnum.cpp:179
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
llvm::pdb::PDB_BuiltinType::Char
@ Char
TpiStream.h
llvm::pdb::NativeTypeEnum::isPacked
bool isPacked() const override
Definition: NativeTypeEnum.cpp:331
Int64
@ Int64
Definition: TargetLibraryInfo.cpp:52
llvm::pdb::NativeTypeEnum::isScoped
bool isScoped() const override
Definition: NativeTypeEnum.cpp:338
llvm::codeview::TypeVisitorCallbacks
Definition: TypeVisitorCallbacks.h:18
llvm::pdb::NativeTypeEnum::getLength
uint64_t getLength() const override
Definition: NativeTypeEnum.cpp:298
llvm::codeview::ClassOptions::HasConstructorOrDestructor
@ HasConstructorOrDestructor
llvm::pdb::PDB_BuiltinType::Char8
@ Char8
llvm::pdb::UInt16
@ UInt16
Definition: PDBTypes.h:404
llvm::pdb::NativeTypeEnum::isUnalignedType
bool isUnalignedType() const override
Definition: NativeTypeEnum.cpp:373
llvm::pdb::NativeSession::getPDBFile
PDBFile & getPDBFile()
Definition: NativeSession.h:109
llvm::Error::success
static ErrorSuccess success()
Create a success value.
Definition: Error.h:329
llvm::pdb::NativeTypeEnum::isValueUdt
bool isValueUdt() const override
Definition: NativeTypeEnum.cpp:355
llvm::pdb::PDB_BuiltinType::Char32
@ Char32
llvm::pdb::PdbSymbolIdField::Type
@ Type
llvm::pdb::PDB_BuiltinType::HResult
@ HResult
PDBSymbolTypeBuiltin.h
llvm::Type
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
llvm::pdb::Bool
@ Bool
llvm::pdb::PdbSymbolIdField::UnmodifiedType
@ UnmodifiedType
llvm::pdb::SymbolCache::getOrCreateFieldListMember
SymIndexId getOrCreateFieldListMember(codeview::TypeIndex FieldListTI, uint32_t Index, Args &&... ConstructorArgs)
Definition: SymbolCache.h:157
Int16
@ Int16
Definition: TargetLibraryInfo.cpp:46
llvm::codeview::ClassOptions::HasOverloadedOperator
@ HasOverloadedOperator
NativeSymbolEnumerator.h
llvm::pdb::PDB_SymType
PDB_SymType
These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:243
llvm::codeview::ClassOptions::ContainsNestedClass
@ ContainsNestedClass
llvm::codeview::ClassOptions::Scoped
@ Scoped
llvm::pdb::PdbSymbolIdField::ClassParent
@ ClassParent
llvm::codeview::visitMemberRecordStream
Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
Definition: CVTypeVisitor.cpp:271
llvm::codeview::EnumRecord
Definition: TypeRecord.h:519
llvm::codeview::CVMemberRecord
Definition: TypeRecord.h:34
llvm::pdb::NativeTypeEnum::findChildren
std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type) const override
Definition: NativeTypeEnum.cpp:167
llvm::pdb::NativeTypeEnum::~NativeTypeEnum
~NativeTypeEnum() override
llvm::pdb::SymIndexId
uint32_t SymIndexId
Definition: PDBTypes.h:26
LazyRandomTypeCollection.h
llvm::pdb::PdbSymbolIdField::LexicalParent
@ LexicalParent
llvm::codeview::LazyRandomTypeCollection
Provides amortized O(1) random access to a CodeView type stream.
Definition: LazyRandomTypeCollection.h:49
llvm::pdb::UInt32
@ UInt32
Definition: PDBTypes.h:405
llvm::dwarf::Index
Index
Definition: Dwarf.h:472
llvm::pdb::PDB_BuiltinType::Int
@ Int
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:53
llvm::codeview::ListContinuationRecord
LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records together.
Definition: TypeRecord.h:915
llvm::codeview::ModifierRecord
Definition: TypeRecord.h:130
llvm::pdb::NativeTypeEnum::NativeTypeEnum
NativeTypeEnum(NativeSession &Session, SymIndexId Id, codeview::TypeIndex TI, codeview::EnumRecord Record)
Definition: NativeTypeEnum.cpp:118
llvm::pdb::NativeTypeEnum::isRefUdt
bool isRefUdt() const override
Definition: NativeTypeEnum.cpp:353
llvm::pdb::IPDBSession::getConcreteSymbolById
std::unique_ptr< T > getConcreteSymbolById(SymIndexId SymbolId) const
Definition: IPDBSession.h:41
llvm::codeview::ClassOptions::Intrinsic
@ Intrinsic
llvm::pdb::NativeTypeEnum::hasAssignmentOperator
bool hasAssignmentOperator() const override
Definition: NativeTypeEnum.cpp:267
llvm::pdb::PDB_BuiltinType::UInt
@ UInt
llvm::pdb::NativeTypeEnum::UnmodifiedType
NativeTypeEnum * UnmodifiedType
Definition: NativeTypeEnum.h:69
llvm::pdb
Definition: ConcreteSymbolEnumerator.h:20
llvm::pdb::NativeTypeEnum::isNested
bool isNested() const override
Definition: NativeTypeEnum.cpp:316
llvm::pdb::SymbolCache::getSymbolById
std::unique_ptr< PDBSymbol > getSymbolById(SymIndexId SymbolId) const
Definition: SymbolCache.cpp:247
llvm::pdb::PDB_BuiltinType::Char16
@ Char16
llvm::pdb::NativeTypeEnum
Definition: NativeTypeEnum.h:25
llvm::pdb::NativeTypeEnum::hasConstructor
bool hasConstructor() const override
Definition: NativeTypeEnum.cpp:259
llvm::codeview::EnumeratorRecord
Definition: TypeRecord.h:830
Index
uint32_t Index
Definition: ELFObjHandler.cpp:83
uint64_t
TypeRecord.h
llvm::pdb::PDB_BuiltinType::WCharT
@ WCharT
llvm::pdb::dumpSymbolField
void dumpSymbolField(raw_ostream &OS, StringRef Name, T Value, int Indent)
Definition: PDBExtras.h:47
llvm::codeview::CVRecord::kind
Kind kind() const
Definition: CVRecord.h:42
llvm::pdb::NativeTypeEnum::getUnmodifiedTypeId
SymIndexId getUnmodifiedTypeId() const override
Definition: NativeTypeEnum.cpp:255
llvm::pdb::NativeTypeEnum::dump
void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const override
Definition: NativeTypeEnum.cpp:131
llvm::codeview::ContinuationRecordKind::FieldList
@ FieldList
llvm::pdb::dumpSymbolIdField
void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value, int Indent, const IPDBSession &Session, PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags)
Definition: PDBSymbol.cpp:202
llvm::pdb::PDB_BuiltinType::None
@ None
llvm::pdb::NativeSession::getSymbolCache
SymbolCache & getSymbolCache()
Definition: NativeSession.h:113
llvm::pdb::NativeTypeEnum::isConstType
bool isConstType() const override
Definition: NativeTypeEnum.cpp:359
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
llvm::move
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1861
llvm::pdb::NativeSymbolEnumerator
Definition: NativeSymbolEnumerator.h:24
llvm::pdb::NativeTypeEnum::hasCastOperator
bool hasCastOperator() const override
Definition: NativeTypeEnum.cpp:290
llvm::pdb::PDB_SymType::Data
@ Data
llvm::Record
Definition: Record.h:1573
llvm::pdb::NativeRawSymbol::getSymIndexId
SymIndexId getSymIndexId() const override
Definition: NativeRawSymbol.cpp:291
llvm::pdb::NativeTypeEnum::isInterfaceUdt
bool isInterfaceUdt() const override
Definition: NativeTypeEnum.cpp:357
llvm::codeview::FieldListRecord
Definition: TypeRecord.h:385
llvm::logicalview::LVCompareKind::Types
@ Types
llvm::codeview::CVRecord< TypeLeafKind >
llvm::codeview::ClassOptions::HasOverloadedAssignmentOperator
@ HasOverloadedAssignmentOperator
llvm_unreachable
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Definition: ErrorHandling.h:143
llvm::cantFail
void cantFail(Error Err, const char *Msg=nullptr)
Report a fatal error if Err is a failure value.
Definition: Error.h:744
uint32_t
llvm::pdb::PDB_BuiltinType
PDB_BuiltinType
These values correspond to the Basictype enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:335
llvm::pdb::NativeTypeEnum::hasOverloadedOperator
bool hasOverloadedOperator() const override
Definition: NativeTypeEnum.cpp:323
llvm::pdb::PDB_SymType::Enum
@ Enum
llvm::pdb::NativeTypeEnum::getBuiltinType
PDB_BuiltinType getBuiltinType() const override
Definition: NativeTypeEnum.cpp:181
llvm::pdb::PDB_BuiltinType::Complex
@ Complex
llvm::pdb::PDBFile::getPDBTpiStream
Expected< TpiStream & > getPDBTpiStream()
Definition: PDBFile.cpp:301
llvm::pdb::NativeTypeBuiltin::Session
NativeSession & Session
Definition: NativeTypeBuiltin.h:40
llvm::codeview::ClassOptions::Packed
@ Packed
llvm::pdb::NativeTypeEnum::getTypeId
SymIndexId getTypeId() const override
Definition: NativeTypeEnum.cpp:345
llvm::pdb::NativeTypeBuiltin
Definition: NativeTypeBuiltin.h:21
llvm::pdb::SymbolCache::findSymbolByTypeIndex
SymIndexId findSymbolByTypeIndex(codeview::TypeIndex TI) const
Definition: SymbolCache.cpp:158
std
Definition: BitVector.h:851
llvm::None
constexpr std::nullopt_t None
Definition: None.h:27
llvm::pdb::PDB_BuiltinType::Float
@ Float
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:155
CVTypeVisitor.h
llvm::pdb::NativeTypeEnum::getName
std::string getName() const override
Definition: NativeTypeEnum.cpp:309
visitKnownMember
static Error visitKnownMember(CVMemberRecord &Record, TypeVisitorCallbacks &Callbacks)
Definition: CVTypeVisitor.cpp:34
llvm::pdb::NativeRawSymbol::dump
void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const override
Definition: NativeRawSymbol.cpp:21
llvm::pdb::NativeSession
Definition: NativeSession.h:32
NativeTypeEnum.h
llvm::codeview
Definition: AppendingTypeTableBuilder.h:22
llvm::pdb::PdbSymbolIdField
PdbSymbolIdField
Definition: IPDBRawSymbol.h:24
llvm::pdb::NativeTypeEnum::Modifiers
Optional< codeview::ModifierRecord > Modifiers
Definition: NativeTypeEnum.h:70
llvm::codeview::ClassOptions::HasConversionOperator
@ HasConversionOperator
NativeTypeBuiltin.h
llvm::Record::getName
StringRef getName() const
Definition: Record.h:1644
PDBFile.h
llvm::pdb::PDBSymbolTypeBuiltin
Definition: PDBSymbolTypeBuiltin.h:19
SymbolCache.h
llvm::pdb::TpiStream
Definition: TpiStream.h:34
llvm::pdb::NativeTypeEnum::hasNestedTypes
bool hasNestedTypes() const override
Definition: NativeTypeEnum.cpp:275
llvm::codeview::TypeIndex
A 32-bit type reference.
Definition: TypeIndex.h:96
llvm::pdb::SymbolCache::getNativeSymbolById
NativeRawSymbol & getNativeSymbolById(SymIndexId SymbolId) const
Definition: SymbolCache.cpp:263
llvm::pdb::NativeRawSymbol::Session
NativeSession & Session
Definition: NativeRawSymbol.h:232
llvm::pdb::IPDBEnumChildren< PDBSymbol >
llvm::pdb::NativeTypeEnum::isIntrinsic
bool isIntrinsic() const override
Definition: NativeTypeEnum.cpp:283
llvm::AMDGPU::VGPRIndexMode::Id
Id
Definition: SIDefines.h:241
llvm::pdb::UInt64
@ UInt64
Definition: PDBTypes.h:406
Int32
@ Int32
Definition: TargetLibraryInfo.cpp:47
llvm::pdb::TpiStream::typeCollection
codeview::LazyRandomTypeCollection & typeCollection()
Definition: TpiStream.h:59
llvm::codeview::ClassOptions::Nested
@ Nested
llvm::pdb::NativeTypeEnum::getUnderlyingBuiltinType
const NativeTypeBuiltin & getUnderlyingBuiltinType() const
Definition: NativeTypeEnum.cpp:380
llvm::pdb::NativeRawSymbol
Definition: NativeRawSymbol.h:21
NativeSession.h