LLVM  8.0.1
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->printEnum("PtrType", unsigned(Ptr.getPointerKind()),
365  makeArrayRef(PtrKindNames));
366  W->printEnum("PtrMode", unsigned(Ptr.getMode()), makeArrayRef(PtrModeNames));
367 
368  W->printNumber("IsFlat", Ptr.isFlat());
369  W->printNumber("IsConst", Ptr.isConst());
370  W->printNumber("IsVolatile", Ptr.isVolatile());
371  W->printNumber("IsUnaligned", Ptr.isUnaligned());
372  W->printNumber("IsRestrict", Ptr.isRestrict());
373  W->printNumber("IsThisPtr&", Ptr.isLValueReferenceThisPtr());
374  W->printNumber("IsThisPtr&&", Ptr.isRValueReferenceThisPtr());
375  W->printNumber("SizeOf", Ptr.getSize());
376 
377  if (Ptr.isPointerToMember()) {
378  const MemberPointerInfo &MI = Ptr.getMemberInfo();
379 
380  printTypeIndex("ClassType", MI.getContainingType());
381  W->printEnum("Representation", uint16_t(MI.getRepresentation()),
382  makeArrayRef(PtrMemberRepNames));
383  }
384 
385  return Error::success();
386 }
387 
389  uint16_t Mods = static_cast<uint16_t>(Mod.getModifiers());
390  printTypeIndex("ModifiedType", Mod.getModifiedType());
391  W->printFlags("Modifiers", Mods, makeArrayRef(TypeModifierNames));
392 
393  return Error::success();
394 }
395 
397  printTypeIndex("Type", BitField.getType());
398  W->printNumber("BitSize", BitField.getBitSize());
399  W->printNumber("BitOffset", BitField.getBitOffset());
400  return Error::success();
401 }
402 
404  VFTableShapeRecord &Shape) {
405  W->printNumber("VFEntryCount", Shape.getEntryCount());
406  return Error::success();
407 }
408 
411  printTypeIndex("UDT", Line.getUDT());
412  printItemIndex("SourceFile", Line.getSourceFile());
413  W->printNumber("LineNumber", Line.getLineNumber());
414  return Error::success();
415 }
416 
418  UdtModSourceLineRecord &Line) {
419  printTypeIndex("UDT", Line.getUDT());
420  printItemIndex("SourceFile", Line.getSourceFile());
421  W->printNumber("LineNumber", Line.getLineNumber());
422  W->printNumber("Module", Line.getModule());
423  return Error::success();
424 }
425 
427  W->printNumber("NumArgs", static_cast<uint32_t>(Args.getArgs().size()));
428 
429  ListScope Arguments(*W, "Arguments");
430  for (auto Arg : Args.getArgs()) {
431  printItemIndex("ArgType", Arg);
432  }
433  return Error::success();
434 }
435 
436 void TypeDumpVisitor::printMemberAttributes(MemberAttributes Attrs) {
437  return printMemberAttributes(Attrs.getAccess(), Attrs.getMethodKind(),
438  Attrs.getFlags());
439 }
440 
441 void TypeDumpVisitor::printMemberAttributes(MemberAccess Access,
443  MethodOptions Options) {
444  W->printEnum("AccessSpecifier", uint8_t(Access),
445  makeArrayRef(MemberAccessNames));
446  // Data members will be vanilla. Don't try to print a method kind for them.
447  if (Kind != MethodKind::Vanilla)
448  W->printEnum("MethodKind", unsigned(Kind), makeArrayRef(MemberKindNames));
449  if (Options != MethodOptions::None) {
450  W->printFlags("MethodOptions", unsigned(Options),
451  makeArrayRef(MethodOptionNames));
452  }
453 }
454 
456  W->printHex("UnknownMember", unsigned(Record.Kind));
457  return Error::success();
458 }
459 
461  W->printEnum("Kind", uint16_t(Record.kind()), makeArrayRef(LeafTypeNames));
462  W->printNumber("Length", uint32_t(Record.content().size()));
463  return Error::success();
464 }
465 
468  printTypeIndex("Type", Nested.getNestedType());
469  W->printString("Name", Nested.getName());
470  return Error::success();
471 }
472 
474  OneMethodRecord &Method) {
475  MethodKind K = Method.getMethodKind();
476  printMemberAttributes(Method.getAccess(), K, Method.getOptions());
477  printTypeIndex("Type", Method.getType());
478  // If virtual, then read the vftable offset.
479  if (Method.isIntroducingVirtual())
480  W->printHex("VFTableOffset", Method.getVFTableOffset());
481  W->printString("Name", Method.getName());
482  return Error::success();
483 }
484 
486  OverloadedMethodRecord &Method) {
487  W->printHex("MethodCount", Method.getNumOverloads());
488  printTypeIndex("MethodListIndex", Method.getMethodList());
489  W->printString("Name", Method.getName());
490  return Error::success();
491 }
492 
495  printMemberAttributes(Field.getAccess(), MethodKind::Vanilla,
497  printTypeIndex("Type", Field.getType());
498  W->printHex("FieldOffset", Field.getFieldOffset());
499  W->printString("Name", Field.getName());
500  return Error::success();
501 }
502 
504  StaticDataMemberRecord &Field) {
505  printMemberAttributes(Field.getAccess(), MethodKind::Vanilla,
507  printTypeIndex("Type", Field.getType());
508  W->printString("Name", Field.getName());
509  return Error::success();
510 }
511 
513  VFPtrRecord &VFTable) {
514  printTypeIndex("Type", VFTable.getType());
515  return Error::success();
516 }
517 
519  EnumeratorRecord &Enum) {
520  printMemberAttributes(Enum.getAccess(), MethodKind::Vanilla,
522  W->printNumber("EnumValue", Enum.getValue());
523  W->printString("Name", Enum.getName());
524  return Error::success();
525 }
526 
529  printMemberAttributes(Base.getAccess(), MethodKind::Vanilla,
531  printTypeIndex("BaseType", Base.getBaseType());
532  W->printHex("BaseOffset", Base.getBaseOffset());
533  return Error::success();
534 }
535 
537  VirtualBaseClassRecord &Base) {
538  printMemberAttributes(Base.getAccess(), MethodKind::Vanilla,
540  printTypeIndex("BaseType", Base.getBaseType());
541  printTypeIndex("VBPtrType", Base.getVBPtrType());
542  W->printHex("VBPtrOffset", Base.getVBPtrOffset());
543  W->printHex("VBTableIndex", Base.getVTableIndex());
544  return Error::success();
545 }
546 
548  ListContinuationRecord &Cont) {
549  printTypeIndex("ContinuationIndex", Cont.getContinuationIndex());
550  return Error::success();
551 }
552 
554  W->printEnum("Mode", uint16_t(LR.Mode), makeArrayRef(LabelTypeEnum));
555  return Error::success();
556 }
557 
559  PrecompRecord &Precomp) {
560  W->printHex("StartIndex", Precomp.getStartTypeIndex());
561  W->printHex("Count", Precomp.getTypesCount());
562  W->printHex("Signature", Precomp.getSignature());
563  W->printString("PrecompFile", Precomp.getPrecompFilePath());
564  return Error::success();
565 }
566 
568  EndPrecompRecord &EndPrecomp) {
569  W->printHex("Signature", EndPrecomp.getSignature());
570  return Error::success();
571 }
const NoneType None
Definition: None.h:24
MemberAccess getAccess() const
Definition: TypeRecord.h:847
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:412
int32_t getThisPointerAdjustment() const
Definition: TypeRecord.h:199
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:457
uint64_t getSize() const
Definition: TypeRecord.h:413
Kind kind() const
Definition: CVRecord.h:37
uint32_t getSignature() const
Definition: TypeRecord.h:942
This class represents lattice values for constants.
Definition: AllocatorList.h:24
uint64_t getSize() const
Definition: TypeRecord.h:496
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:882
bool isRValueReferenceThisPtr() const
Definition: TypeRecord.h:350
ArrayRef< StringRef > getMethodNames() const
Definition: TypeRecord.h:715
MemberAccess getAccess() const
Definition: TypeRecord.h:742
TypeIndex getReferentType() const
Definition: TypeRecord.h:304
MemberPointerInfo getMemberInfo() const
Definition: TypeRecord.h:324
void printTypeIndex(StringRef FieldName, TypeIndex TI) const
static const EnumEntry< uint8_t > FunctionOptionEnum[]
TypeIndex getType() const
Definition: TypeRecord.h:549
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:398
Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
virtual uint32_t size()=0
MethodKind getMethodKind() const
Definition: TypeRecord.h:740
TypeIndex getFunctionType() const
Definition: TypeRecord.h:233
bool isLValueReferenceThisPtr() const
Definition: TypeRecord.h:346
StringRef getName() const
Definition: TypeRecord.h:460
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:626
StringRef getName() const
Definition: TypeRecord.h:414
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:883
static const EnumEntry< TypeLeafKind > LeafTypeNames[]
raw_ostream & getOStream()
ClassOptions getOptions() const
Definition: TypeRecord.h:458
ModifierOptions
Equivalent to CV_modifier_t.
Definition: CodeView.h:299
TypeIndex getFunctionType() const
Definition: TypeRecord.h:625
LabelType
Equivalent to CV_LABEL_TYPE_e.
Definition: CodeView.h:292
static Error visitKnownRecord(CVSymbol &Record, SymbolVisitorCallbacks &Callbacks)
PointerMode getMode() const
Definition: TypeRecord.h:311
A 32-bit type reference.
Definition: TypeIndex.h:96
TypeIndex getElementType() const
Definition: TypeRecord.h:411
TypeIndex getReturnType() const
Definition: TypeRecord.h:163
CallingConvention getCallConv() const
Definition: TypeRecord.h:195
MemberAccess getAccess() const
Definition: TypeRecord.h:803
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:459
StringRef getString() const
Definition: TypeRecord.h:609
ArrayRef< TypeIndex > getArgs() const
Definition: TypeRecord.h:681
PointerToMemberRepresentation getRepresentation() const
Definition: TypeRecord.h:116
static StringRef getLeafTypeName(TypeLeafKind LT)
void printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, TypeIndex TI, TypeCollection &Types)
Definition: TypeIndex.cpp:93
FunctionOptions getOptions() const
Definition: TypeRecord.h:196
uint32_t getVFPtrOffset() const
Definition: TypeRecord.h:712
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:921
StringRef getUniqueName() const
Definition: TypeRecord.h:461
AMDGPU Lower Kernel Arguments
TypeIndex getContainingType() const
Definition: TypeRecord.h:115
For method overload sets. LF_METHOD.
Definition: TypeRecord.h:771
TypeIndex getArgumentList() const
Definition: TypeRecord.h:167
MethodOptions getOptions() const
Definition: TypeRecord.h:741
PointerKind getPointerKind() const
Definition: TypeRecord.h:306
void printHex(StringRef Label, T Value)
TypeIndex getUnderlyingType() const
Definition: TypeRecord.h:535
uint32_t getTypesCount() const
Definition: TypeRecord.h:941
uint64_t getSize() const
Definition: TypeRecord.h:519
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:743
void printNumber(StringRef Label, uint64_t Value)
Error visitUnknownMember(CVMemberRecord &Record) override
static const EnumEntry< uint16_t > PtrMemberRepNames[]
TypeIndex getVTableShape() const
Definition: TypeRecord.h:495
MethodKind getMethodKind() const
Indicates if a method is defined with friend, virtual, static, etc.
Definition: TypeRecord.h:71
MemberAccess getAccess() const
Definition: TypeRecord.h:881
Error visitMemberBegin(CVMemberRecord &Record) override
TypeIndex getOverriddenVTable() const
Definition: TypeRecord.h:711
ArrayRef< OneMethodRecord > getMethods() const
Definition: TypeRecord.h:765
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:264
uint8_t getBitOffset() const
Definition: TypeRecord.h:550
static const EnumEntry< uint16_t > MethodOptionNames[]
TypeIndex getDerivationList() const
Definition: TypeRecord.h:494
TypeIndex getParentScope() const
Definition: TypeRecord.h:624
TypeIndex getCompleteClass() const
Definition: TypeRecord.h:710
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:383
void unindent(int Levels=1)
Definition: ScopedPrinter.h:77
const GUID & getGuid() const
Definition: TypeRecord.h:591
StringRef getPrecompFilePath() const
Definition: TypeRecord.h:943
CallingConvention getCallConv() const
Definition: TypeRecord.h:164
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:250
uint32_t Size
Definition: Profile.cpp:47
TypeIndex getType() const
Definition: TypeRecord.h:864
FunctionOptions getOptions() const
Definition: TypeRecord.h:165
PointerToMemberRepresentation
Equivalent to CV_pmtype_e.
Definition: CodeView.h:368
uint16_t getParameterCount() const
Definition: TypeRecord.h:166
const unsigned Kind
MemberAccess
Source-level access specifier. (CV_access_e)
Definition: CodeView.h:260
uint64_t getFieldOffset() const
Definition: TypeRecord.h:805
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:940
Error visitMemberEnd(CVMemberRecord &Record) override
TypeIndex getModifiedType() const
Definition: TypeRecord.h:144
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:713
ModifierOptions getModifiers() const
Definition: TypeRecord.h:145