LLVM  8.0.0svn
TypeDumpVisitor.cpp
Go to the documentation of this file.
1 //===-- TypeDumpVisitor.cpp - CodeView type info dumper ----------*- C++-*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
11 
12 #include "llvm/ADT/SmallString.h"
20 
21 using namespace llvm;
22 using namespace llvm::codeview;
23 
25 #define CV_TYPE(enum, val) {#enum, enum},
26 #include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
27 };
28 
29 #define ENUM_ENTRY(enum_class, enum) \
30  { #enum, std::underlying_type < enum_class > ::type(enum_class::enum) }
31 
45 };
46 
50 };
51 
53  ENUM_ENTRY(MethodOptions, Pseudo),
58 };
59 
63  ENUM_ENTRY(MethodKind, Static),
68 };
69 
70 static const EnumEntry<uint8_t> PtrKindNames[] = {
84 };
85 
86 static const EnumEntry<uint8_t> PtrModeNames[] = {
92 };
93 
104 };
105 
109 };
110 
136 };
137 
142 };
143 
146 };
147 
148 #undef ENUM_ENTRY
149 
151  switch (LT) {
152 #define TYPE_RECORD(ename, value, name) \
153  case ename: \
154  return #name;
155 #include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
156  default:
157  break;
158  }
159  return "UnknownLeaf";
160 }
161 
163  codeview::printTypeIndex(*W, FieldName, TI, TpiTypes);
164 }
165 
167  codeview::printTypeIndex(*W, FieldName, TI, getSourceTypes());
168 }
169 
171  return visitTypeBegin(Record, TypeIndex::fromArrayIndex(TpiTypes.size()));
172 }
173 
175  W->startLine() << getLeafTypeName(Record.Type);
176  W->getOStream() << " (" << HexNumber(Index.getIndex()) << ")";
177  W->getOStream() << " {\n";
178  W->indent();
179  W->printEnum("TypeLeafKind", unsigned(Record.Type),
180  makeArrayRef(LeafTypeNames));
181  return Error::success();
182 }
183 
185  if (PrintRecordBytes)
186  W->printBinaryBlock("LeafData", getBytesAsCharacters(Record.content()));
187 
188  W->unindent();
189  W->startLine() << "}\n";
190  return Error::success();
191 }
192 
194  W->startLine() << getLeafTypeName(Record.Kind);
195  W->getOStream() << " {\n";
196  W->indent();
197  W->printEnum("TypeLeafKind", unsigned(Record.Kind),
198  makeArrayRef(LeafTypeNames));
199  return Error::success();
200 }
201 
203  if (PrintRecordBytes)
204  W->printBinaryBlock("LeafData", getBytesAsCharacters(Record.Data));
205 
206  W->unindent();
207  W->startLine() << "}\n";
208  return Error::success();
209 }
210 
213  if (auto EC = codeview::visitMemberRecordStream(FieldList.Data, *this))
214  return EC;
215 
216  return Error::success();
217 }
218 
220  printItemIndex("Id", String.getId());
221  W->printString("StringData", String.getString());
222  return Error::success();
223 }
224 
226  auto Indices = Args.getIndices();
227  uint32_t Size = Indices.size();
228  W->printNumber("NumArgs", Size);
229  ListScope Arguments(*W, "Arguments");
230  for (uint32_t I = 0; I < Size; ++I) {
231  printTypeIndex("ArgType", Indices[I]);
232  }
233  return Error::success();
234 }
235 
237  auto Indices = Strs.getIndices();
238  uint32_t Size = Indices.size();
239  W->printNumber("NumStrings", Size);
240  ListScope Arguments(*W, "Strings");
241  for (uint32_t I = 0; I < Size; ++I) {
242  printItemIndex("String", Indices[I]);
243  }
244  return Error::success();
245 }
246 
248  uint16_t Props = static_cast<uint16_t>(Class.getOptions());
249  W->printNumber("MemberCount", Class.getMemberCount());
250  W->printFlags("Properties", Props, makeArrayRef(ClassOptionNames));
251  printTypeIndex("FieldList", Class.getFieldList());
252  printTypeIndex("DerivedFrom", Class.getDerivationList());
253  printTypeIndex("VShape", Class.getVTableShape());
254  W->printNumber("SizeOf", Class.getSize());
255  W->printString("Name", Class.getName());
256  if (Props & uint16_t(ClassOptions::HasUniqueName))
257  W->printString("LinkageName", Class.getUniqueName());
258  return Error::success();
259 }
260 
262  uint16_t Props = static_cast<uint16_t>(Union.getOptions());
263  W->printNumber("MemberCount", Union.getMemberCount());
264  W->printFlags("Properties", Props, makeArrayRef(ClassOptionNames));
265  printTypeIndex("FieldList", Union.getFieldList());
266  W->printNumber("SizeOf", Union.getSize());
267  W->printString("Name", Union.getName());
268  if (Props & uint16_t(ClassOptions::HasUniqueName))
269  W->printString("LinkageName", Union.getUniqueName());
270  return Error::success();
271 }
272 
274  uint16_t Props = static_cast<uint16_t>(Enum.getOptions());
275  W->printNumber("NumEnumerators", Enum.getMemberCount());
276  W->printFlags("Properties", uint16_t(Enum.getOptions()),
277  makeArrayRef(ClassOptionNames));
278  printTypeIndex("UnderlyingType", Enum.getUnderlyingType());
279  printTypeIndex("FieldListType", Enum.getFieldList());
280  W->printString("Name", Enum.getName());
281  if (Props & uint16_t(ClassOptions::HasUniqueName))
282  W->printString("LinkageName", Enum.getUniqueName());
283  return Error::success();
284 }
285 
287  printTypeIndex("ElementType", AT.getElementType());
288  printTypeIndex("IndexType", AT.getIndexType());
289  W->printNumber("SizeOf", AT.getSize());
290  W->printString("Name", AT.getName());
291  return Error::success();
292 }
293 
295  printTypeIndex("CompleteClass", VFT.getCompleteClass());
296  printTypeIndex("OverriddenVFTable", VFT.getOverriddenVTable());
297  W->printHex("VFPtrOffset", VFT.getVFPtrOffset());
298  W->printString("VFTableName", VFT.getName());
299  for (auto N : VFT.getMethodNames())
300  W->printString("MethodName", N);
301  return Error::success();
302 }
303 
305  printTypeIndex("ClassType", Id.getClassType());
306  printTypeIndex("FunctionType", Id.getFunctionType());
307  W->printString("Name", Id.getName());
308  return Error::success();
309 }
310 
312  printTypeIndex("ReturnType", Proc.getReturnType());
313  W->printEnum("CallingConvention", uint8_t(Proc.getCallConv()),
314  makeArrayRef(CallingConventions));
315  W->printFlags("FunctionOptions", uint8_t(Proc.getOptions()),
316  makeArrayRef(FunctionOptionEnum));
317  W->printNumber("NumParameters", Proc.getParameterCount());
318  printTypeIndex("ArgListType", Proc.getArgumentList());
319  return Error::success();
320 }
321 
323  printTypeIndex("ReturnType", MF.getReturnType());
324  printTypeIndex("ClassType", MF.getClassType());
325  printTypeIndex("ThisType", MF.getThisType());
326  W->printEnum("CallingConvention", uint8_t(MF.getCallConv()),
327  makeArrayRef(CallingConventions));
328  W->printFlags("FunctionOptions", uint8_t(MF.getOptions()),
329  makeArrayRef(FunctionOptionEnum));
330  W->printNumber("NumParameters", MF.getParameterCount());
331  printTypeIndex("ArgListType", MF.getArgumentList());
332  W->printNumber("ThisAdjustment", MF.getThisPointerAdjustment());
333  return Error::success();
334 }
335 
337  MethodOverloadListRecord &MethodList) {
338  for (auto &M : MethodList.getMethods()) {
339  ListScope S(*W, "Method");
340  printMemberAttributes(M.getAccess(), M.getMethodKind(), M.getOptions());
341  printTypeIndex("Type", M.getType());
342  if (M.isIntroducingVirtual())
343  W->printHex("VFTableOffset", M.getVFTableOffset());
344  }
345  return Error::success();
346 }
347 
349  printItemIndex("ParentScope", Func.getParentScope());
350  printTypeIndex("FunctionType", Func.getFunctionType());
351  W->printString("Name", Func.getName());
352  return Error::success();
353 }
354 
356  W->printString("Guid", formatv("{0}", TS.getGuid()).str());
357  W->printNumber("Age", TS.getAge());
358  W->printString("Name", TS.getName());
359  return Error::success();
360 }
361 
363  printTypeIndex("PointeeType", Ptr.getReferentType());
364  W->printHex("PointerAttributes", uint32_t(Ptr.getOptions()));
365  W->printEnum("PtrType", unsigned(Ptr.getPointerKind()),
366  makeArrayRef(PtrKindNames));
367  W->printEnum("PtrMode", unsigned(Ptr.getMode()), makeArrayRef(PtrModeNames));
368 
369  W->printNumber("IsFlat", Ptr.isFlat());
370  W->printNumber("IsConst", Ptr.isConst());
371  W->printNumber("IsVolatile", Ptr.isVolatile());
372  W->printNumber("IsUnaligned", Ptr.isUnaligned());
373  W->printNumber("IsRestrict", Ptr.isRestrict());
374  W->printNumber("SizeOf", Ptr.getSize());
375 
376  if (Ptr.isPointerToMember()) {
377  const MemberPointerInfo &MI = Ptr.getMemberInfo();
378 
379  printTypeIndex("ClassType", MI.getContainingType());
380  W->printEnum("Representation", uint16_t(MI.getRepresentation()),
381  makeArrayRef(PtrMemberRepNames));
382  }
383 
384  return Error::success();
385 }
386 
388  uint16_t Mods = static_cast<uint16_t>(Mod.getModifiers());
389  printTypeIndex("ModifiedType", Mod.getModifiedType());
390  W->printFlags("Modifiers", Mods, makeArrayRef(TypeModifierNames));
391 
392  return Error::success();
393 }
394 
396  printTypeIndex("Type", BitField.getType());
397  W->printNumber("BitSize", BitField.getBitSize());
398  W->printNumber("BitOffset", BitField.getBitOffset());
399  return Error::success();
400 }
401 
403  VFTableShapeRecord &Shape) {
404  W->printNumber("VFEntryCount", Shape.getEntryCount());
405  return Error::success();
406 }
407 
410  printTypeIndex("UDT", Line.getUDT());
411  printItemIndex("SourceFile", Line.getSourceFile());
412  W->printNumber("LineNumber", Line.getLineNumber());
413  return Error::success();
414 }
415 
417  UdtModSourceLineRecord &Line) {
418  printTypeIndex("UDT", Line.getUDT());
419  printItemIndex("SourceFile", Line.getSourceFile());
420  W->printNumber("LineNumber", Line.getLineNumber());
421  W->printNumber("Module", Line.getModule());
422  return Error::success();
423 }
424 
426  W->printNumber("NumArgs", static_cast<uint32_t>(Args.getArgs().size()));
427 
428  ListScope Arguments(*W, "Arguments");
429  for (auto Arg : Args.getArgs()) {
430  printItemIndex("ArgType", Arg);
431  }
432  return Error::success();
433 }
434 
435 void TypeDumpVisitor::printMemberAttributes(MemberAttributes Attrs) {
436  return printMemberAttributes(Attrs.getAccess(), Attrs.getMethodKind(),
437  Attrs.getFlags());
438 }
439 
440 void TypeDumpVisitor::printMemberAttributes(MemberAccess Access,
442  MethodOptions Options) {
443  W->printEnum("AccessSpecifier", uint8_t(Access),
444  makeArrayRef(MemberAccessNames));
445  // Data members will be vanilla. Don't try to print a method kind for them.
446  if (Kind != MethodKind::Vanilla)
447  W->printEnum("MethodKind", unsigned(Kind), makeArrayRef(MemberKindNames));
448  if (Options != MethodOptions::None) {
449  W->printFlags("MethodOptions", unsigned(Options),
450  makeArrayRef(MethodOptionNames));
451  }
452 }
453 
455  W->printHex("UnknownMember", unsigned(Record.Kind));
456  return Error::success();
457 }
458 
460  W->printEnum("Kind", uint16_t(Record.kind()), makeArrayRef(LeafTypeNames));
461  W->printNumber("Length", uint32_t(Record.content().size()));
462  return Error::success();
463 }
464 
467  printTypeIndex("Type", Nested.getNestedType());
468  W->printString("Name", Nested.getName());
469  return Error::success();
470 }
471 
473  OneMethodRecord &Method) {
474  MethodKind K = Method.getMethodKind();
475  printMemberAttributes(Method.getAccess(), K, Method.getOptions());
476  printTypeIndex("Type", Method.getType());
477  // If virtual, then read the vftable offset.
478  if (Method.isIntroducingVirtual())
479  W->printHex("VFTableOffset", Method.getVFTableOffset());
480  W->printString("Name", Method.getName());
481  return Error::success();
482 }
483 
485  OverloadedMethodRecord &Method) {
486  W->printHex("MethodCount", Method.getNumOverloads());
487  printTypeIndex("MethodListIndex", Method.getMethodList());
488  W->printString("Name", Method.getName());
489  return Error::success();
490 }
491 
494  printMemberAttributes(Field.getAccess(), MethodKind::Vanilla,
496  printTypeIndex("Type", Field.getType());
497  W->printHex("FieldOffset", Field.getFieldOffset());
498  W->printString("Name", Field.getName());
499  return Error::success();
500 }
501 
503  StaticDataMemberRecord &Field) {
504  printMemberAttributes(Field.getAccess(), MethodKind::Vanilla,
506  printTypeIndex("Type", Field.getType());
507  W->printString("Name", Field.getName());
508  return Error::success();
509 }
510 
512  VFPtrRecord &VFTable) {
513  printTypeIndex("Type", VFTable.getType());
514  return Error::success();
515 }
516 
518  EnumeratorRecord &Enum) {
519  printMemberAttributes(Enum.getAccess(), MethodKind::Vanilla,
521  W->printNumber("EnumValue", Enum.getValue());
522  W->printString("Name", Enum.getName());
523  return Error::success();
524 }
525 
528  printMemberAttributes(Base.getAccess(), MethodKind::Vanilla,
530  printTypeIndex("BaseType", Base.getBaseType());
531  W->printHex("BaseOffset", Base.getBaseOffset());
532  return Error::success();
533 }
534 
536  VirtualBaseClassRecord &Base) {
537  printMemberAttributes(Base.getAccess(), MethodKind::Vanilla,
539  printTypeIndex("BaseType", Base.getBaseType());
540  printTypeIndex("VBPtrType", Base.getVBPtrType());
541  W->printHex("VBPtrOffset", Base.getVBPtrOffset());
542  W->printHex("VBTableIndex", Base.getVTableIndex());
543  return Error::success();
544 }
545 
547  ListContinuationRecord &Cont) {
548  printTypeIndex("ContinuationIndex", Cont.getContinuationIndex());
549  return Error::success();
550 }
551 
553  W->printEnum("Mode", uint16_t(LR.Mode), makeArrayRef(LabelTypeEnum));
554  return Error::success();
555 }
556 
558  PrecompRecord &Precomp) {
559  W->printHex("StartIndex", Precomp.getStartTypeIndex());
560  W->printHex("Count", Precomp.getTypesCount());
561  W->printHex("Signature", Precomp.getSignature());
562  W->printString("PrecompFile", Precomp.getPrecompFilePath());
563  return Error::success();
564 }
565 
567  EndPrecompRecord &EndPrecomp) {
568  W->printHex("Signature", EndPrecomp.getSignature());
569  return Error::success();
570 }
const NoneType None
Definition: None.h:24
MemberAccess getAccess() const
Definition: TypeRecord.h:812
static const EnumEntry< uint16_t > LabelTypeEnum[]
PointerKind
Equivalent to CV_ptrtype_e.
Definition: CodeView.h:328
void printItemIndex(StringRef FieldName, TypeIndex TI) const
TypeIndex getIndexType() const
Definition: TypeRecord.h:395
int32_t getThisPointerAdjustment() const
Definition: TypeRecord.h:194
static const EnumEntry< uint8_t > PtrKindNames[]
void printEnum(StringRef Label, T Value, ArrayRef< EnumEntry< TEnum >> EnumValues)
Definition: ScopedPrinter.h:96
uint16_t getMemberCount() const
Definition: TypeRecord.h:432
uint64_t getSize() const
Definition: TypeRecord.h:396
Kind kind() const
Definition: CVRecord.h:37
uint32_t getSignature() const
Definition: TypeRecord.h:907
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
uint64_t getSize() const
Definition: TypeRecord.h:471
static const EnumEntry< uint8_t > PtrModeNames[]
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
Definition: CodeView.h:34
ArrayRef< uint8_t > Data
Definition: TypeRecord.h:41
Error visitTypeEnd(CVType &Record) override
TypeIndex getBaseType() const
Definition: TypeRecord.h:847
ArrayRef< StringRef > getMethodNames() const
Definition: TypeRecord.h:680
MemberAccess getAccess() const
Definition: TypeRecord.h:707
TypeIndex getReferentType() const
Definition: TypeRecord.h:295
MemberPointerInfo getMemberInfo() const
Definition: TypeRecord.h:315
void printTypeIndex(StringRef FieldName, TypeIndex TI) const
static const EnumEntry< uint8_t > FunctionOptionEnum[]
TypeIndex getType() const
Definition: TypeRecord.h:524
auto formatv(const char *Fmt, Ts &&... Vals) -> formatv_object< decltype(std::make_tuple(detail::build_format_adapter(std::forward< Ts >(Vals))...))>
ArrayRef< uint8_t > Data
Definition: TypeRecord.h:381
Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
virtual uint32_t size()=0
MethodKind getMethodKind() const
Definition: TypeRecord.h:705
TypeIndex getFunctionType() const
Definition: TypeRecord.h:228
StringRef getName() const
Definition: TypeRecord.h:435
Error visitUnknownType(CVType &Record) override
Action to take on unknown types. By default, they are ignored.
static const EnumEntry< uint16_t > ClassOptionNames[]
ArrayRef< T > makeArrayRef(const T &OneElt)
Construct an ArrayRef from a single element.
Definition: ArrayRef.h:451
StringRef getName() const
Definition: TypeRecord.h:601
StringRef getName() const
Definition: TypeRecord.h:397
void indent(int Levels=1)
Definition: ScopedPrinter.h:75
static const EnumEntry< uint16_t > MemberKindNames[]
ArrayRef< uint8_t > content() const
Definition: CVRecord.h:44
uint64_t getBaseOffset() const
Definition: TypeRecord.h:848
static const EnumEntry< TypeLeafKind > LeafTypeNames[]
raw_ostream & getOStream()
ClassOptions getOptions() const
Definition: TypeRecord.h:433
ModifierOptions
Equivalent to CV_modifier_t.
Definition: CodeView.h:299
TypeIndex getFunctionType() const
Definition: TypeRecord.h:600
LabelType
Equivalent to CV_LABEL_TYPE_e.
Definition: CodeView.h:292
static Error visitKnownRecord(CVSymbol &Record, SymbolVisitorCallbacks &Callbacks)
PointerMode getMode() const
Definition: TypeRecord.h:302
A 32-bit type reference.
Definition: TypeIndex.h:96
TypeIndex getElementType() const
Definition: TypeRecord.h:394
TypeIndex getReturnType() const
Definition: TypeRecord.h:158
CallingConvention getCallConv() const
Definition: TypeRecord.h:190
MemberAccess getAccess() const
Definition: TypeRecord.h:768
constexpr char Attrs[]
Key for Kernel::Metadata::mAttrs.
MethodKind
Part of member attribute flags. (CV_methodprop_e)
Definition: CodeView.h:268
static TypeIndex fromArrayIndex(uint32_t Index)
Definition: TypeIndex.h:123
#define ENUM_ENTRY(enum_class, enum)
Error visitTypeBegin(CVType &Record) override
Paired begin/end actions for all types.
TypeIndex getFieldList() const
Definition: TypeRecord.h:434
StringRef getString() const
Definition: TypeRecord.h:584
ArrayRef< TypeIndex > getArgs() const
Definition: TypeRecord.h:656
PointerToMemberRepresentation getRepresentation() const
Definition: TypeRecord.h:111
static StringRef getLeafTypeName(TypeLeafKind LT)
void printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, TypeIndex TI, TypeCollection &Types)
Definition: TypeIndex.cpp:90
FunctionOptions getOptions() const
Definition: TypeRecord.h:191
uint32_t getVFPtrOffset() const
Definition: TypeRecord.h:677
static Error visitKnownMember(CVMemberRecord &Record, TypeVisitorCallbacks &Callbacks)
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:149
raw_ostream & startLine()
LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records together.
Definition: TypeRecord.h:886
StringRef getUniqueName() const
Definition: TypeRecord.h:436
AMDGPU Lower Kernel Arguments
TypeIndex getContainingType() const
Definition: TypeRecord.h:110
For method overload sets. LF_METHOD.
Definition: TypeRecord.h:736
TypeIndex getArgumentList() const
Definition: TypeRecord.h:162
MethodOptions getOptions() const
Definition: TypeRecord.h:706
PointerKind getPointerKind() const
Definition: TypeRecord.h:297
void printHex(StringRef Label, T Value)
TypeIndex getUnderlyingType() const
Definition: TypeRecord.h:510
uint32_t getTypesCount() const
Definition: TypeRecord.h:906
uint64_t getSize() const
Definition: TypeRecord.h:494
uint32_t getIndex() const
Definition: TypeIndex.h:111
void printString(StringRef Value)
static ErrorSuccess success()
Create a success value.
Definition: Error.h:327
int32_t getVFTableOffset() const
Definition: TypeRecord.h:708
void printNumber(StringRef Label, uint64_t Value)
Error visitUnknownMember(CVMemberRecord &Record) override
static const EnumEntry< uint16_t > PtrMemberRepNames[]
TypeIndex getVTableShape() const
Definition: TypeRecord.h:470
MethodKind getMethodKind() const
Indicates if a method is defined with friend, virtual, static, etc.
Definition: TypeRecord.h:71
MemberAccess getAccess() const
Definition: TypeRecord.h:846
Error visitMemberBegin(CVMemberRecord &Record) override
TypeIndex getOverriddenVTable() const
Definition: TypeRecord.h:676
ArrayRef< OneMethodRecord > getMethods() const
Definition: TypeRecord.h:730
static const EnumEntry< uint8_t > CallingConventions[]
The access may modify the value stored in memory.
PointerMode
Equivalent to CV_ptrmode_e.
Definition: CodeView.h:345
ArrayRef< TypeIndex > getIndices() const
Definition: TypeRecord.h:259
uint8_t getBitOffset() const
Definition: TypeRecord.h:525
static const EnumEntry< uint16_t > MethodOptionNames[]
TypeIndex getDerivationList() const
Definition: TypeRecord.h:469
TypeIndex getParentScope() const
Definition: TypeRecord.h:599
TypeIndex getCompleteClass() const
Definition: TypeRecord.h:675
MethodOptions
Equivalent to CV_fldattr_t bitfield.
Definition: CodeView.h:279
StringRef getBytesAsCharacters(ArrayRef< uint8_t > LeafData)
Reinterpret a byte array as an array of characters.
amdgpu Simplify well known AMD library false Value Value * Arg
TypeIndex getNestedType() const
Definition: TypeRecord.h:366
void unindent(int Levels=1)
Definition: ScopedPrinter.h:77
const GUID & getGuid() const
Definition: TypeRecord.h:566
StringRef getPrecompFilePath() const
Definition: TypeRecord.h:908
CallingConvention getCallConv() const
Definition: TypeRecord.h:159
static const EnumEntry< uint16_t > TypeModifierNames[]
static const EnumEntry< uint8_t > MemberAccessNames[]
void printFlags(StringRef Label, T Value, ArrayRef< EnumEntry< TFlag >> Flags, TFlag EnumMask1={}, TFlag EnumMask2={}, TFlag EnumMask3={})
#define I(x, y, z)
Definition: MD5.cpp:58
#define N
ArrayRef< TypeIndex > getIndices() const
Definition: TypeRecord.h:245
PointerOptions getOptions() const
Definition: TypeRecord.h:307
uint32_t Size
Definition: Profile.cpp:47
TypeIndex getType() const
Definition: TypeRecord.h:829
FunctionOptions getOptions() const
Definition: TypeRecord.h:160
PointerToMemberRepresentation
Equivalent to CV_pmtype_e.
Definition: CodeView.h:366
uint16_t getParameterCount() const
Definition: TypeRecord.h:161
const unsigned Kind
MemberAccess
Source-level access specifier. (CV_access_e)
Definition: CodeView.h:260
uint64_t getFieldOffset() const
Definition: TypeRecord.h:770
MethodOptions getFlags() const
Get the flags that are not included in access control or method properties.
Definition: TypeRecord.h:79
void printBinaryBlock(StringRef Label, ArrayRef< uint8_t > Value, uint32_t StartOffset)
Equvalent to CV_fldattr_t in cvinfo.h.
Definition: TypeRecord.h:47
Lightweight error class with error context and mandatory checking.
Definition: Error.h:158
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
Definition: CodeView.h:173
uint32_t getStartTypeIndex() const
Definition: TypeRecord.h:905
Error visitMemberEnd(CVMemberRecord &Record) override
TypeIndex getModifiedType() const
Definition: TypeRecord.h:139
IRTranslator LLVM IR MI
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
MemberAccess getAccess() const
Get the access specifier. Valid for any kind of member.
Definition: TypeRecord.h:66
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
StringRef getName() const
Definition: TypeRecord.h:678
ModifierOptions getModifiers() const
Definition: TypeRecord.h:140