LLVM  9.0.0svn
TypeDumpVisitor.cpp
Go to the documentation of this file.
1 //===-- TypeDumpVisitor.cpp - CodeView type info dumper ----------*- 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 
11 #include "llvm/ADT/SmallString.h"
19 
20 using namespace llvm;
21 using namespace llvm::codeview;
22 
24 #define CV_TYPE(enum, val) {#enum, enum},
25 #include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
26 };
27 
28 #define ENUM_ENTRY(enum_class, enum) \
29  { #enum, std::underlying_type < enum_class > ::type(enum_class::enum) }
30 
44 };
45 
49 };
50 
52  ENUM_ENTRY(MethodOptions, Pseudo),
57 };
58 
62  ENUM_ENTRY(MethodKind, Static),
67 };
68 
69 static const EnumEntry<uint8_t> PtrKindNames[] = {
83 };
84 
85 static const EnumEntry<uint8_t> PtrModeNames[] = {
91 };
92 
103 };
104 
108 };
109 
135 };
136 
141 };
142 
145 };
146 
147 #undef ENUM_ENTRY
148 
150  switch (LT) {
151 #define TYPE_RECORD(ename, value, name) \
152  case ename: \
153  return #name;
154 #include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
155  default:
156  break;
157  }
158  return "UnknownLeaf";
159 }
160 
162  codeview::printTypeIndex(*W, FieldName, TI, TpiTypes);
163 }
164 
166  codeview::printTypeIndex(*W, FieldName, TI, getSourceTypes());
167 }
168 
170  return visitTypeBegin(Record, TypeIndex::fromArrayIndex(TpiTypes.size()));
171 }
172 
174  W->startLine() << getLeafTypeName(Record.kind());
175  W->getOStream() << " (" << HexNumber(Index.getIndex()) << ")";
176  W->getOStream() << " {\n";
177  W->indent();
178  W->printEnum("TypeLeafKind", unsigned(Record.kind()),
179  makeArrayRef(LeafTypeNames));
180  return Error::success();
181 }
182 
184  if (PrintRecordBytes)
185  W->printBinaryBlock("LeafData", getBytesAsCharacters(Record.content()));
186 
187  W->unindent();
188  W->startLine() << "}\n";
189  return Error::success();
190 }
191 
193  W->startLine() << getLeafTypeName(Record.Kind);
194  W->getOStream() << " {\n";
195  W->indent();
196  W->printEnum("TypeLeafKind", unsigned(Record.Kind),
197  makeArrayRef(LeafTypeNames));
198  return Error::success();
199 }
200 
202  if (PrintRecordBytes)
203  W->printBinaryBlock("LeafData", getBytesAsCharacters(Record.Data));
204 
205  W->unindent();
206  W->startLine() << "}\n";
207  return Error::success();
208 }
209 
212  if (auto EC = codeview::visitMemberRecordStream(FieldList.Data, *this))
213  return EC;
214 
215  return Error::success();
216 }
217 
219  printItemIndex("Id", String.getId());
220  W->printString("StringData", String.getString());
221  return Error::success();
222 }
223 
225  auto Indices = Args.getIndices();
226  uint32_t Size = Indices.size();
227  W->printNumber("NumArgs", Size);
228  ListScope Arguments(*W, "Arguments");
229  for (uint32_t I = 0; I < Size; ++I) {
230  printTypeIndex("ArgType", Indices[I]);
231  }
232  return Error::success();
233 }
234 
236  auto Indices = Strs.getIndices();
237  uint32_t Size = Indices.size();
238  W->printNumber("NumStrings", Size);
239  ListScope Arguments(*W, "Strings");
240  for (uint32_t I = 0; I < Size; ++I) {
241  printItemIndex("String", Indices[I]);
242  }
243  return Error::success();
244 }
245 
247  uint16_t Props = static_cast<uint16_t>(Class.getOptions());
248  W->printNumber("MemberCount", Class.getMemberCount());
249  W->printFlags("Properties", Props, makeArrayRef(ClassOptionNames));
250  printTypeIndex("FieldList", Class.getFieldList());
251  printTypeIndex("DerivedFrom", Class.getDerivationList());
252  printTypeIndex("VShape", Class.getVTableShape());
253  W->printNumber("SizeOf", Class.getSize());
254  W->printString("Name", Class.getName());
255  if (Props & uint16_t(ClassOptions::HasUniqueName))
256  W->printString("LinkageName", Class.getUniqueName());
257  return Error::success();
258 }
259 
261  uint16_t Props = static_cast<uint16_t>(Union.getOptions());
262  W->printNumber("MemberCount", Union.getMemberCount());
263  W->printFlags("Properties", Props, makeArrayRef(ClassOptionNames));
264  printTypeIndex("FieldList", Union.getFieldList());
265  W->printNumber("SizeOf", Union.getSize());
266  W->printString("Name", Union.getName());
267  if (Props & uint16_t(ClassOptions::HasUniqueName))
268  W->printString("LinkageName", Union.getUniqueName());
269  return Error::success();
270 }
271 
273  uint16_t Props = static_cast<uint16_t>(Enum.getOptions());
274  W->printNumber("NumEnumerators", Enum.getMemberCount());
275  W->printFlags("Properties", uint16_t(Enum.getOptions()),
276  makeArrayRef(ClassOptionNames));
277  printTypeIndex("UnderlyingType", Enum.getUnderlyingType());
278  printTypeIndex("FieldListType", Enum.getFieldList());
279  W->printString("Name", Enum.getName());
280  if (Props & uint16_t(ClassOptions::HasUniqueName))
281  W->printString("LinkageName", Enum.getUniqueName());
282  return Error::success();
283 }
284 
286  printTypeIndex("ElementType", AT.getElementType());
287  printTypeIndex("IndexType", AT.getIndexType());
288  W->printNumber("SizeOf", AT.getSize());
289  W->printString("Name", AT.getName());
290  return Error::success();
291 }
292 
294  printTypeIndex("CompleteClass", VFT.getCompleteClass());
295  printTypeIndex("OverriddenVFTable", VFT.getOverriddenVTable());
296  W->printHex("VFPtrOffset", VFT.getVFPtrOffset());
297  W->printString("VFTableName", VFT.getName());
298  for (auto N : VFT.getMethodNames())
299  W->printString("MethodName", N);
300  return Error::success();
301 }
302 
304  printTypeIndex("ClassType", Id.getClassType());
305  printTypeIndex("FunctionType", Id.getFunctionType());
306  W->printString("Name", Id.getName());
307  return Error::success();
308 }
309 
311  printTypeIndex("ReturnType", Proc.getReturnType());
312  W->printEnum("CallingConvention", uint8_t(Proc.getCallConv()),
313  makeArrayRef(CallingConventions));
314  W->printFlags("FunctionOptions", uint8_t(Proc.getOptions()),
315  makeArrayRef(FunctionOptionEnum));
316  W->printNumber("NumParameters", Proc.getParameterCount());
317  printTypeIndex("ArgListType", Proc.getArgumentList());
318  return Error::success();
319 }
320 
322  printTypeIndex("ReturnType", MF.getReturnType());
323  printTypeIndex("ClassType", MF.getClassType());
324  printTypeIndex("ThisType", MF.getThisType());
325  W->printEnum("CallingConvention", uint8_t(MF.getCallConv()),
326  makeArrayRef(CallingConventions));
327  W->printFlags("FunctionOptions", uint8_t(MF.getOptions()),
328  makeArrayRef(FunctionOptionEnum));
329  W->printNumber("NumParameters", MF.getParameterCount());
330  printTypeIndex("ArgListType", MF.getArgumentList());
331  W->printNumber("ThisAdjustment", MF.getThisPointerAdjustment());
332  return Error::success();
333 }
334 
336  MethodOverloadListRecord &MethodList) {
337  for (auto &M : MethodList.getMethods()) {
338  ListScope S(*W, "Method");
339  printMemberAttributes(M.getAccess(), M.getMethodKind(), M.getOptions());
340  printTypeIndex("Type", M.getType());
341  if (M.isIntroducingVirtual())
342  W->printHex("VFTableOffset", M.getVFTableOffset());
343  }
344  return Error::success();
345 }
346 
348  printItemIndex("ParentScope", Func.getParentScope());
349  printTypeIndex("FunctionType", Func.getFunctionType());
350  W->printString("Name", Func.getName());
351  return Error::success();
352 }
353 
355  W->printString("Guid", formatv("{0}", TS.getGuid()).str());
356  W->printNumber("Age", TS.getAge());
357  W->printString("Name", TS.getName());
358  return Error::success();
359 }
360 
362  printTypeIndex("PointeeType", Ptr.getReferentType());
363  W->printEnum("PtrType", unsigned(Ptr.getPointerKind()),
364  makeArrayRef(PtrKindNames));
365  W->printEnum("PtrMode", unsigned(Ptr.getMode()), makeArrayRef(PtrModeNames));
366 
367  W->printNumber("IsFlat", Ptr.isFlat());
368  W->printNumber("IsConst", Ptr.isConst());
369  W->printNumber("IsVolatile", Ptr.isVolatile());
370  W->printNumber("IsUnaligned", Ptr.isUnaligned());
371  W->printNumber("IsRestrict", Ptr.isRestrict());
372  W->printNumber("IsThisPtr&", Ptr.isLValueReferenceThisPtr());
373  W->printNumber("IsThisPtr&&", Ptr.isRValueReferenceThisPtr());
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:23
MemberAccess getAccess() const
Definition: TypeRecord.h:846
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:411
int32_t getThisPointerAdjustment() const
Definition: TypeRecord.h:198
static const EnumEntry< uint8_t > PtrKindNames[]
void printEnum(StringRef Label, T Value, ArrayRef< EnumEntry< TEnum >> EnumValues)
Definition: ScopedPrinter.h:95
uint16_t getMemberCount() const
Definition: TypeRecord.h:456
uint64_t getSize() const
Definition: TypeRecord.h:412
Kind kind() const
Definition: CVRecord.h:43
uint32_t getSignature() const
Definition: TypeRecord.h:941
This class represents lattice values for constants.
Definition: AllocatorList.h:23
uint64_t getSize() const
Definition: TypeRecord.h:495
static const EnumEntry< uint8_t > PtrModeNames[]
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
Definition: CodeView.h:33
ArrayRef< uint8_t > Data
Definition: TypeRecord.h:40
Error visitTypeEnd(CVType &Record) override
TypeIndex getBaseType() const
Definition: TypeRecord.h:881
bool isRValueReferenceThisPtr() const
Definition: TypeRecord.h:349
ArrayRef< StringRef > getMethodNames() const
Definition: TypeRecord.h:714
MemberAccess getAccess() const
Definition: TypeRecord.h:741
TypeIndex getReferentType() const
Definition: TypeRecord.h:303
MemberPointerInfo getMemberInfo() const
Definition: TypeRecord.h:323
void printTypeIndex(StringRef FieldName, TypeIndex TI) const
static const EnumEntry< uint8_t > FunctionOptionEnum[]
TypeIndex getType() const
Definition: TypeRecord.h:548
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:397
Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
virtual uint32_t size()=0
MethodKind getMethodKind() const
Definition: TypeRecord.h:739
TypeIndex getFunctionType() const
Definition: TypeRecord.h:232
bool isLValueReferenceThisPtr() const
Definition: TypeRecord.h:345
StringRef getName() const
Definition: TypeRecord.h:459
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:450
StringRef getName() const
Definition: TypeRecord.h:625
StringRef getName() const
Definition: TypeRecord.h:413
void indent(int Levels=1)
Definition: ScopedPrinter.h:74
static const EnumEntry< uint16_t > MemberKindNames[]
ArrayRef< uint8_t > content() const
Definition: CVRecord.h:57
uint64_t getBaseOffset() const
Definition: TypeRecord.h:882
static const EnumEntry< TypeLeafKind > LeafTypeNames[]
raw_ostream & getOStream()
ClassOptions getOptions() const
Definition: TypeRecord.h:457
ModifierOptions
Equivalent to CV_modifier_t.
Definition: CodeView.h:299
TypeIndex getFunctionType() const
Definition: TypeRecord.h:624
LabelType
Equivalent to CV_LABEL_TYPE_e.
Definition: CodeView.h:292
static Error visitKnownRecord(CVSymbol &Record, SymbolVisitorCallbacks &Callbacks)
PointerMode getMode() const
Definition: TypeRecord.h:310
A 32-bit type reference.
Definition: TypeIndex.h:95
TypeIndex getElementType() const
Definition: TypeRecord.h:410
TypeIndex getReturnType() const
Definition: TypeRecord.h:162
CallingConvention getCallConv() const
Definition: TypeRecord.h:194
MemberAccess getAccess() const
Definition: TypeRecord.h:802
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:122
#define ENUM_ENTRY(enum_class, enum)
Error visitTypeBegin(CVType &Record) override
Paired begin/end actions for all types.
TypeIndex getFieldList() const
Definition: TypeRecord.h:458
StringRef getString() const
Definition: TypeRecord.h:608
ArrayRef< TypeIndex > getArgs() const
Definition: TypeRecord.h:680
PointerToMemberRepresentation getRepresentation() const
Definition: TypeRecord.h:115
static StringRef getLeafTypeName(TypeLeafKind LT)
void printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, TypeIndex TI, TypeCollection &Types)
Definition: TypeIndex.cpp:92
FunctionOptions getOptions() const
Definition: TypeRecord.h:195
uint32_t getVFPtrOffset() const
Definition: TypeRecord.h:711
static Error visitKnownMember(CVMemberRecord &Record, TypeVisitorCallbacks &Callbacks)
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:148
raw_ostream & startLine()
LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records together.
Definition: TypeRecord.h:920
StringRef getUniqueName() const
Definition: TypeRecord.h:460
AMDGPU Lower Kernel Arguments
TypeIndex getContainingType() const
Definition: TypeRecord.h:114
For method overload sets. LF_METHOD.
Definition: TypeRecord.h:770
TypeIndex getArgumentList() const
Definition: TypeRecord.h:166
MethodOptions getOptions() const
Definition: TypeRecord.h:740
amdgpu Simplify well known AMD library false FunctionCallee Value * Arg
PointerKind getPointerKind() const
Definition: TypeRecord.h:305
void printHex(StringRef Label, T Value)
TypeIndex getUnderlyingType() const
Definition: TypeRecord.h:534
uint32_t getTypesCount() const
Definition: TypeRecord.h:940
uint64_t getSize() const
Definition: TypeRecord.h:518
uint32_t getIndex() const
Definition: TypeIndex.h:110
void printString(StringRef Value)
static ErrorSuccess success()
Create a success value.
Definition: Error.h:326
int32_t getVFTableOffset() const
Definition: TypeRecord.h:742
void printNumber(StringRef Label, uint64_t Value)
Error visitUnknownMember(CVMemberRecord &Record) override
static const EnumEntry< uint16_t > PtrMemberRepNames[]
TypeIndex getVTableShape() const
Definition: TypeRecord.h:494
MethodKind getMethodKind() const
Indicates if a method is defined with friend, virtual, static, etc.
Definition: TypeRecord.h:70
MemberAccess getAccess() const
Definition: TypeRecord.h:880
Error visitMemberBegin(CVMemberRecord &Record) override
TypeIndex getOverriddenVTable() const
Definition: TypeRecord.h:710
ArrayRef< OneMethodRecord > getMethods() const
Definition: TypeRecord.h:764
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:263
uint8_t getBitOffset() const
Definition: TypeRecord.h:549
static const EnumEntry< uint16_t > MethodOptionNames[]
TypeIndex getDerivationList() const
Definition: TypeRecord.h:493
TypeIndex getParentScope() const
Definition: TypeRecord.h:623
TypeIndex getCompleteClass() const
Definition: TypeRecord.h:709
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.
TypeIndex getNestedType() const
Definition: TypeRecord.h:382
void unindent(int Levels=1)
Definition: ScopedPrinter.h:76
const GUID & getGuid() const
Definition: TypeRecord.h:590
StringRef getPrecompFilePath() const
Definition: TypeRecord.h:942
CallingConvention getCallConv() const
Definition: TypeRecord.h:163
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:249
uint32_t Size
Definition: Profile.cpp:46
TypeIndex getType() const
Definition: TypeRecord.h:863
FunctionOptions getOptions() const
Definition: TypeRecord.h:164
PointerToMemberRepresentation
Equivalent to CV_pmtype_e.
Definition: CodeView.h:368
uint16_t getParameterCount() const
Definition: TypeRecord.h:165
MemberAccess
Source-level access specifier. (CV_access_e)
Definition: CodeView.h:260
uint64_t getFieldOffset() const
Definition: TypeRecord.h:804
MethodOptions getFlags() const
Get the flags that are not included in access control or method properties.
Definition: TypeRecord.h:78
void printBinaryBlock(StringRef Label, ArrayRef< uint8_t > Value, uint32_t StartOffset)
Equvalent to CV_fldattr_t in cvinfo.h.
Definition: TypeRecord.h:46
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
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:939
Error visitMemberEnd(CVMemberRecord &Record) override
TypeIndex getModifiedType() const
Definition: TypeRecord.h:143
IRTranslator LLVM IR MI
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
MemberAccess getAccess() const
Get the access specifier. Valid for any kind of member.
Definition: TypeRecord.h:65
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
StringRef getName() const
Definition: TypeRecord.h:712
ModifierOptions getModifiers() const
Definition: TypeRecord.h:144