LLVM 24.0.0git
TypeRecord.h
Go to the documentation of this file.
1//===- TypeRecord.h ---------------------------------------------*- 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
9#ifndef LLVM_DEBUGINFO_CODEVIEW_TYPERECORD_H
10#define LLVM_DEBUGINFO_CODEVIEW_TYPERECORD_H
11
12#include "llvm/ADT/APSInt.h"
13#include "llvm/ADT/ArrayRef.h"
15#include "llvm/ADT/StringRef.h"
21#include "llvm/Support/Endian.h"
22#include <algorithm>
23#include <cstdint>
24#include <optional>
25#include <vector>
26
27namespace llvm {
28namespace codeview {
29
33
38
39/// Equvalent to CV_fldattr_t in cvinfo.h.
42
43 enum {
45 };
46
47 MemberAttributes() = default;
48
50 : Attrs(static_cast<uint16_t>(Access)) {}
51
53 Attrs = static_cast<uint16_t>(Access);
54 Attrs |= (static_cast<uint16_t>(Kind) << MethodKindShift);
55 Attrs |= static_cast<uint16_t>(Flags);
56 }
57
58 constexpr bool operator==(const MemberAttributes &Rhs) const noexcept {
59 return Attrs == Rhs.Attrs;
60 }
61
62 /// Get the access specifier. Valid for any kind of member.
64 return MemberAccess(unsigned(Attrs) & unsigned(MethodOptions::AccessMask));
65 }
66
67 /// Indicates if a method is defined with friend, virtual, static, etc.
69 return MethodKind(
70 (unsigned(Attrs) & unsigned(MethodOptions::MethodKindMask)) >>
72 }
73
74 /// Get the flags that are not included in access control or method
75 /// properties.
77 return MethodOptions(
78 unsigned(Attrs) &
80 }
81
82 /// Is this method virtual.
83 bool isVirtual() const {
84 auto MP = getMethodKind();
85 return MP != MethodKind::Vanilla && MP != MethodKind::Friend &&
87 }
88
89 /// Does this member introduce a new virtual method.
90 bool isIntroducedVirtual() const {
91 auto MP = getMethodKind();
92 return MP == MethodKind::IntroducingVirtual ||
94 }
95
96 /// Is this method static.
97 bool isStatic() const {
99 }
100};
101
102// Does not correspond to any tag, this is the tail of an LF_POINTER record
103// if it represents a member pointer.
121
123protected:
124 TypeRecord() = default;
126
127public:
128 TypeRecordKind getKind() const { return Kind; }
129
131};
132
133// LF_MODIFIER
148
149// LF_PROCEDURE
173
174// LF_MFUNCTION
208
209// LF_LABEL
219
220// LF_MFUNC_ID
238
239// LF_ARGLIST
240class ArgListRecord : public TypeRecord {
241public:
242 ArgListRecord() = default;
244
247
249
250 std::vector<TypeIndex> ArgIndices;
251};
252
253// LF_SUBSTR_LIST
255public:
256 StringListRecord() = default;
258
261
263
264 std::vector<TypeIndex> StringIndices;
265};
266
267// LF_POINTER
268class PointerRecord : public TypeRecord {
269public:
270 // ---------------------------XXXXX
271 static const uint32_t PointerKindShift = 0;
272 static const uint32_t PointerKindMask = 0x1F;
273
274 // ------------------------XXX-----
275 static const uint32_t PointerModeShift = 5;
276 static const uint32_t PointerModeMask = 0x07;
277
278 // ----------XXX------XXXXX--------
279 static const uint32_t PointerOptionMask = 0x381f00;
280
281 // -------------XXXXXX------------
282 static const uint32_t PointerSizeShift = 13;
283 static const uint32_t PointerSizeMask = 0xFF;
284
285 PointerRecord() = default;
287
291
296
301
303
305 return static_cast<PointerKind>((Attrs >> PointerKindShift) &
307 }
308
310 return static_cast<PointerMode>((Attrs >> PointerModeShift) &
312 }
313
315 return static_cast<PointerOptions>(Attrs & PointerOptionMask);
316 }
317
318 uint8_t getSize() const {
320 }
321
323
328
329 bool isFlat() const { return !!(Attrs & uint32_t(PointerOptions::Flat32)); }
330 bool isConst() const { return !!(Attrs & uint32_t(PointerOptions::Const)); }
331
332 bool isVolatile() const {
334 }
335
336 bool isUnaligned() const {
338 }
339
340 bool isRestrict() const {
342 }
343
347
351
354 std::optional<MemberPointerInfo> MemberInfo;
355
357 uint8_t Size) {
358 Attrs = calcAttrs(PK, PM, PO, Size);
359 }
360
361private:
362 static uint32_t calcAttrs(PointerKind PK, PointerMode PM, PointerOptions PO,
363 uint8_t Size) {
364 uint32_t A = 0;
365 A |= static_cast<uint32_t>(PK);
366 A |= static_cast<uint32_t>(PO);
367 A |= (static_cast<uint32_t>(PM) << PointerModeShift);
368 A |= (static_cast<uint32_t>(Size) << PointerSizeShift);
369 return A;
370 }
371};
372
373// LF_NESTTYPE
387
388// LF_FIELDLIST
398
399// LF_ARRAY
419
420class TagRecord : public TypeRecord {
421protected:
422 TagRecord() = default;
428
429public:
430 static const int HfaKindShift = 11;
431 static const int HfaKindMask = 0x1800;
432 static const int WinRTKindShift = 14;
433 static const int WinRTKindMask = 0xC000;
434
438
439 bool isNested() const {
441 }
442
446
450
451 bool isScoped() const {
453 }
454
456 ClassOptions getOptions() const { return Options; }
457 TypeIndex getFieldList() const { return FieldList; }
458 StringRef getName() const { return Name; }
460
461 /// Number of members in the associated field list.
462 ///
463 /// Note that the full 64 bit range can only be used by the *2 records.
464 /// The others use a 16 bit value for this.
470};
471
472// LF_CLASS, LF_STRUCTURE, LF_INTERFACE, LF_CLASS2, LF_STRUCTURE2, LF_INTERFACE2
504
505// LF_UNION, LF_UNION2
529
530// LF_ENUM
545
546// LF_BITFIELD
563
564// LF_VTSHAPE
566public:
571 explicit VFTableShapeRecord(std::vector<VFTableSlotKind> Slots)
572 : TypeRecord(TypeRecordKind::VFTableShape), Slots(std::move(Slots)) {}
573
575 if (!SlotsRef.empty())
576 return SlotsRef;
577 return Slots;
578 }
579
580 uint32_t getEntryCount() const { return getSlots().size(); }
581
583 std::vector<VFTableSlotKind> Slots;
584};
585
586// LF_TYPESERVER2
588public:
589 TypeServer2Record() = default;
592 : TypeRecord(TypeRecordKind::TypeServer2), Age(Age), Name(Name) {
593 assert(GuidStr.size() == 16 && "guid isn't 16 bytes");
594 ::memcpy(Guid.Guid, GuidStr.data(), 16);
595 }
596
597 const GUID &getGuid() const { return Guid; }
598 uint32_t getAge() const { return Age; }
599 StringRef getName() const { return Name; }
600
601 GUID Guid = {};
604};
605
606// LF_STRING_ID
620
621// LF_FUNC_ID
638
639// LF_UDT_SRC_LINE
656
657// LF_UDT_MOD_SRC_LINE
677
678// LF_BUILDINFO
680public:
681 BuildInfoRecord() = default;
685
687
688 /// Indices of known build info arguments.
690 CurrentDirectory, ///< Absolute CWD path
691 BuildTool, ///< Absolute compiler path
692 SourceFile, ///< Path to main source file, relative or absolute
693 TypeServerPDB, ///< Absolute path of type server PDB (/Fd)
694 CommandLine, ///< Full canonical command line (maybe -cc1)
696 };
697
699};
700
701// LF_VFTABLE
729
730// LF_ONEMETHOD
761
762// LF_METHODLIST
774
775/// For method overload sets. LF_METHOD
793
794// LF_MEMBER
818
819// LF_STMEMBER
839
840// LF_ENUMERATE
860
861// LF_VFUNCTAB
862class VFPtrRecord : public TypeRecord {
863public:
864 VFPtrRecord() = default;
868
869 TypeIndex getType() const { return Type; }
870
872};
873
874// LF_BCLASS, LF_BINTERFACE
894
895// LF_VBCLASS, LF_IVBCLASS
923
924/// LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records
925/// together. The first will end in an LF_INDEX record that points to the next.
938
939// LF_PRECOMP
955
956// LF_ENDPRECOMP
958public:
959 EndPrecompRecord() = default;
961
962 uint32_t getSignature() const { return Signature; }
963
965};
966
967} // end namespace codeview
968} // end namespace llvm
969
970#endif // LLVM_DEBUGINFO_CODEVIEW_TYPERECORD_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
uint64_t uint64_t
This file implements the APSInt class, which is a simple class that represents an arbitrary sized int...
Lightweight arrays that are backed by an arbitrary BinaryStream.
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
DXIL Resource Access
static LVOptions Options
Definition LVOptions.cpp:25
This file defines the SmallVector class.
An arbitrary precision integer that knows its signedness.
Definition APSInt.h:24
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
size_t size() const
Get the array size.
Definition ArrayRef.h:141
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
constexpr size_t size() const
Get the string size.
Definition StringRef.h:144
char front() const
Get the first character in the string.
Definition StringRef.h:147
constexpr const char * data() const
Get a pointer to the start of the string (which may not be null terminated).
Definition StringRef.h:138
LLVM Value Representation.
Definition Value.h:75
std::vector< TypeIndex > ArgIndices
Definition TypeRecord.h:250
ArrayRef< TypeIndex > getIndices() const
Definition TypeRecord.h:248
ArgListRecord(TypeRecordKind Kind, ArrayRef< TypeIndex > Indices)
Definition TypeRecord.h:245
ArgListRecord(TypeRecordKind Kind)
Definition TypeRecord.h:243
ArrayRecord(TypeIndex ElementType, TypeIndex IndexType, uint64_t Size, StringRef Name)
Definition TypeRecord.h:404
TypeIndex getElementType() const
Definition TypeRecord.h:409
TypeIndex getIndexType() const
Definition TypeRecord.h:410
ArrayRecord(TypeRecordKind Kind)
Definition TypeRecord.h:403
uint64_t getSize() const
Definition TypeRecord.h:411
StringRef getName() const
Definition TypeRecord.h:412
BaseClassRecord(MemberAccess Access, TypeIndex Type, uint64_t Offset)
Definition TypeRecord.h:882
TypeIndex getBaseType() const
Definition TypeRecord.h:887
MemberAccess getAccess() const
Definition TypeRecord.h:886
BaseClassRecord(MemberAttributes Attrs, TypeIndex Type, uint64_t Offset)
Definition TypeRecord.h:879
BaseClassRecord(TypeRecordKind Kind)
Definition TypeRecord.h:878
BitFieldRecord(TypeRecordKind Kind)
Definition TypeRecord.h:550
BitFieldRecord(TypeIndex Type, uint8_t BitSize, uint8_t BitOffset)
Definition TypeRecord.h:551
BuildInfoRecord(TypeRecordKind Kind)
Definition TypeRecord.h:682
BuildInfoArg
Indices of known build info arguments.
Definition TypeRecord.h:689
@ CurrentDirectory
Absolute CWD path.
Definition TypeRecord.h:690
@ SourceFile
Path to main source file, relative or absolute.
Definition TypeRecord.h:692
@ BuildTool
Absolute compiler path.
Definition TypeRecord.h:691
@ CommandLine
Full canonical command line (maybe -cc1)
Definition TypeRecord.h:694
@ TypeServerPDB
Absolute path of type server PDB (/Fd)
Definition TypeRecord.h:693
BuildInfoRecord(ArrayRef< TypeIndex > ArgIndices)
Definition TypeRecord.h:683
SmallVector< TypeIndex, MaxArgs > ArgIndices
Definition TypeRecord.h:698
ArrayRef< TypeIndex > getArgs() const
Definition TypeRecord.h:686
WindowsRTClassKind getWinRTKind() const
Definition TypeRecord.h:490
ClassRecord(TypeRecordKind Kind, uint64_t MemberCount, ClassOptions Options, TypeIndex FieldList, TypeIndex DerivationList, TypeIndex VTableShape, uint64_t Size, StringRef Name, StringRef UniqueName)
Definition TypeRecord.h:477
ClassRecord(TypeRecordKind Kind)
Definition TypeRecord.h:476
TypeIndex getDerivationList() const
Definition TypeRecord.h:496
uint64_t getSize() const
Definition TypeRecord.h:498
TypeIndex getVTableShape() const
Definition TypeRecord.h:497
MemberAccess getAccess() const
Definition TypeRecord.h:808
DataMemberRecord(MemberAttributes Attrs, TypeIndex Type, uint64_t Offset, StringRef Name)
Definition TypeRecord.h:799
DataMemberRecord(TypeRecordKind Kind)
Definition TypeRecord.h:798
DataMemberRecord(MemberAccess Access, TypeIndex Type, uint64_t Offset, StringRef Name)
Definition TypeRecord.h:803
EndPrecompRecord(TypeRecordKind Kind)
Definition TypeRecord.h:960
EnumRecord(TypeRecordKind Kind)
Definition TypeRecord.h:534
TypeIndex getUnderlyingType() const
Definition TypeRecord.h:541
EnumRecord(uint16_t MemberCount, ClassOptions Options, TypeIndex FieldList, StringRef Name, StringRef UniqueName, TypeIndex UnderlyingType)
Definition TypeRecord.h:535
EnumeratorRecord(TypeRecordKind Kind)
Definition TypeRecord.h:844
EnumeratorRecord(MemberAccess Access, APSInt Value, StringRef Name)
Definition TypeRecord.h:848
MemberAccess getAccess() const
Definition TypeRecord.h:852
EnumeratorRecord(MemberAttributes Attrs, APSInt Value, StringRef Name)
Definition TypeRecord.h:845
FieldListRecord(TypeRecordKind Kind)
Definition TypeRecord.h:392
FieldListRecord(ArrayRef< uint8_t > Data)
Definition TypeRecord.h:393
FuncIdRecord(TypeIndex ParentScope, TypeIndex FunctionType, StringRef Name)
Definition TypeRecord.h:626
TypeIndex getFunctionType() const
Definition TypeRecord.h:631
StringRef getName() const
Definition TypeRecord.h:632
FuncIdRecord(TypeRecordKind Kind)
Definition TypeRecord.h:625
TypeIndex getParentScope() const
Definition TypeRecord.h:630
LabelRecord(TypeRecordKind Kind)
Definition TypeRecord.h:213
LabelRecord(LabelType Mode)
Definition TypeRecord.h:215
ListContinuationRecord(TypeRecordKind Kind)
Definition TypeRecord.h:929
ListContinuationRecord(TypeIndex ContinuationIndex)
Definition TypeRecord.h:930
MemberFuncIdRecord(TypeRecordKind Kind)
Definition TypeRecord.h:224
MemberFuncIdRecord(TypeIndex ClassType, TypeIndex FunctionType, StringRef Name)
Definition TypeRecord.h:225
MemberFunctionRecord(TypeRecordKind Kind)
Definition TypeRecord.h:178
MemberFunctionRecord(TypeIndex ReturnType, TypeIndex ClassType, TypeIndex ThisType, CallingConvention CallConv, FunctionOptions Options, uint16_t ParameterCount, TypeIndex ArgumentList, int32_t ThisPointerAdjustment)
Definition TypeRecord.h:180
FunctionOptions getOptions() const
Definition TypeRecord.h:194
CallingConvention getCallConv() const
Definition TypeRecord.h:193
TypeIndex getContainingType() const
Definition TypeRecord.h:112
MemberPointerInfo(TypeIndex ContainingType, PointerToMemberRepresentation Representation)
Definition TypeRecord.h:108
PointerToMemberRepresentation Representation
Definition TypeRecord.h:118
PointerToMemberRepresentation getRepresentation() const
Definition TypeRecord.h:113
std::vector< OneMethodRecord > Methods
Definition TypeRecord.h:772
MethodOverloadListRecord(ArrayRef< OneMethodRecord > Methods)
Definition TypeRecord.h:767
ArrayRef< OneMethodRecord > getMethods() const
Definition TypeRecord.h:770
MethodOverloadListRecord(TypeRecordKind Kind)
Definition TypeRecord.h:766
ModifierRecord(TypeIndex ModifiedType, ModifierOptions Modifiers)
Definition TypeRecord.h:138
ModifierOptions getModifiers() const
Definition TypeRecord.h:143
ModifierRecord(TypeRecordKind Kind)
Definition TypeRecord.h:137
TypeIndex getModifiedType() const
Definition TypeRecord.h:142
TypeIndex getNestedType() const
Definition TypeRecord.h:381
NestedTypeRecord(TypeIndex Type, StringRef Name)
Definition TypeRecord.h:378
NestedTypeRecord(TypeRecordKind Kind)
Definition TypeRecord.h:377
MemberAccess getAccess() const
Definition TypeRecord.h:747
OneMethodRecord(TypeRecordKind Kind)
Definition TypeRecord.h:734
MethodOptions getOptions() const
Definition TypeRecord.h:746
MethodKind getMethodKind() const
Definition TypeRecord.h:745
OneMethodRecord(TypeIndex Type, MemberAccess Access, MethodKind MK, MethodOptions Options, int32_t VFTableOffset, StringRef Name)
Definition TypeRecord.h:739
OneMethodRecord(TypeIndex Type, MemberAttributes Attrs, int32_t VFTableOffset, StringRef Name)
Definition TypeRecord.h:735
OverloadedMethodRecord(TypeRecordKind Kind)
Definition TypeRecord.h:779
OverloadedMethodRecord(uint16_t NumOverloads, TypeIndex MethodList, StringRef Name)
Definition TypeRecord.h:780
static const uint32_t PointerKindShift
Definition TypeRecord.h:271
bool isRValueReferenceThisPtr() const
Definition TypeRecord.h:348
static const uint32_t PointerModeShift
Definition TypeRecord.h:275
std::optional< MemberPointerInfo > MemberInfo
Definition TypeRecord.h:354
PointerRecord(TypeRecordKind Kind)
Definition TypeRecord.h:286
PointerRecord(TypeIndex ReferentType, PointerKind PK, PointerMode PM, PointerOptions PO, uint8_t Size)
Definition TypeRecord.h:292
static const uint32_t PointerOptionMask
Definition TypeRecord.h:279
TypeIndex getReferentType() const
Definition TypeRecord.h:302
PointerRecord(TypeIndex ReferentType, uint32_t Attrs)
Definition TypeRecord.h:288
MemberPointerInfo getMemberInfo() const
Definition TypeRecord.h:322
void setAttrs(PointerKind PK, PointerMode PM, PointerOptions PO, uint8_t Size)
Definition TypeRecord.h:356
bool isLValueReferenceThisPtr() const
Definition TypeRecord.h:344
static const uint32_t PointerSizeShift
Definition TypeRecord.h:282
PointerMode getMode() const
Definition TypeRecord.h:309
PointerRecord(TypeIndex ReferentType, PointerKind PK, PointerMode PM, PointerOptions PO, uint8_t Size, const MemberPointerInfo &MPI)
Definition TypeRecord.h:297
PointerKind getPointerKind() const
Definition TypeRecord.h:304
static const uint32_t PointerSizeMask
Definition TypeRecord.h:283
static const uint32_t PointerKindMask
Definition TypeRecord.h:272
PointerOptions getOptions() const
Definition TypeRecord.h:314
static const uint32_t PointerModeMask
Definition TypeRecord.h:276
uint32_t getSignature() const
Definition TypeRecord.h:947
StringRef getPrecompFilePath() const
Definition TypeRecord.h:948
PrecompRecord(TypeRecordKind Kind)
Definition TypeRecord.h:943
uint32_t getTypesCount() const
Definition TypeRecord.h:946
uint32_t getStartTypeIndex() const
Definition TypeRecord.h:945
TypeIndex getReturnType() const
Definition TypeRecord.h:161
TypeIndex getArgumentList() const
Definition TypeRecord.h:165
uint16_t getParameterCount() const
Definition TypeRecord.h:164
FunctionOptions getOptions() const
Definition TypeRecord.h:163
ProcedureRecord(TypeIndex ReturnType, CallingConvention CallConv, FunctionOptions Options, uint16_t ParameterCount, TypeIndex ArgumentList)
Definition TypeRecord.h:154
ProcedureRecord(TypeRecordKind Kind)
Definition TypeRecord.h:153
CallingConvention getCallConv() const
Definition TypeRecord.h:162
StaticDataMemberRecord(MemberAccess Access, TypeIndex Type, StringRef Name)
Definition TypeRecord.h:827
StaticDataMemberRecord(TypeRecordKind Kind)
Definition TypeRecord.h:823
StaticDataMemberRecord(MemberAttributes Attrs, TypeIndex Type, StringRef Name)
Definition TypeRecord.h:824
StringRef getString() const
Definition TypeRecord.h:615
StringIdRecord(TypeRecordKind Kind)
Definition TypeRecord.h:610
StringIdRecord(TypeIndex Id, StringRef String)
Definition TypeRecord.h:611
StringListRecord(TypeRecordKind Kind, ArrayRef< TypeIndex > Indices)
Definition TypeRecord.h:259
StringListRecord(TypeRecordKind Kind)
Definition TypeRecord.h:257
std::vector< TypeIndex > StringIndices
Definition TypeRecord.h:264
ArrayRef< TypeIndex > getIndices() const
Definition TypeRecord.h:262
ClassOptions getOptions() const
Definition TypeRecord.h:456
bool containsNestedClass() const
Definition TypeRecord.h:447
TagRecord(TypeRecordKind Kind, uint64_t MemberCount, ClassOptions Options, TypeIndex FieldList, StringRef Name, StringRef UniqueName)
Definition TypeRecord.h:424
uint64_t getMemberCount() const
Definition TypeRecord.h:455
TagRecord(TypeRecordKind Kind)
Definition TypeRecord.h:423
static const int WinRTKindMask
Definition TypeRecord.h:433
static const int WinRTKindShift
Definition TypeRecord.h:432
TypeIndex getFieldList() const
Definition TypeRecord.h:457
StringRef getName() const
Definition TypeRecord.h:458
uint64_t MemberCount
Number of members in the associated field list.
Definition TypeRecord.h:465
static const int HfaKindMask
Definition TypeRecord.h:431
static const int HfaKindShift
Definition TypeRecord.h:430
StringRef getUniqueName() const
Definition TypeRecord.h:459
A 32-bit type reference.
Definition TypeIndex.h:97
TypeRecord(TypeRecordKind Kind)
Definition TypeRecord.h:125
TypeRecordKind getKind() const
Definition TypeRecord.h:128
TypeServer2Record(TypeRecordKind Kind)
Definition TypeRecord.h:590
const GUID & getGuid() const
Definition TypeRecord.h:597
TypeServer2Record(StringRef GuidStr, uint32_t Age, StringRef Name)
Definition TypeRecord.h:591
UdtModSourceLineRecord(TypeRecordKind Kind)
Definition TypeRecord.h:661
UdtModSourceLineRecord(TypeIndex UDT, TypeIndex SourceFile, uint32_t LineNumber, uint16_t Module)
Definition TypeRecord.h:662
UdtSourceLineRecord(TypeIndex UDT, TypeIndex SourceFile, uint32_t LineNumber)
Definition TypeRecord.h:644
UdtSourceLineRecord(TypeRecordKind Kind)
Definition TypeRecord.h:643
VFPtrRecord(TypeRecordKind Kind)
Definition TypeRecord.h:865
VFPtrRecord(TypeIndex Type)
Definition TypeRecord.h:866
TypeIndex getType() const
Definition TypeRecord.h:869
uint32_t getVFPtrOffset() const
Definition TypeRecord.h:717
TypeIndex getOverriddenVTable() const
Definition TypeRecord.h:716
ArrayRef< StringRef > getMethodNames() const
Definition TypeRecord.h:720
VFTableRecord(TypeRecordKind Kind)
Definition TypeRecord.h:705
std::vector< StringRef > MethodNames
Definition TypeRecord.h:727
StringRef getName() const
Definition TypeRecord.h:718
TypeIndex getCompleteClass() const
Definition TypeRecord.h:715
VFTableRecord(TypeIndex CompleteClass, TypeIndex OverriddenVFTable, uint32_t VFPtrOffset, StringRef Name, ArrayRef< StringRef > Methods)
Definition TypeRecord.h:706
VFTableShapeRecord(std::vector< VFTableSlotKind > Slots)
Definition TypeRecord.h:571
VFTableShapeRecord(TypeRecordKind Kind)
Definition TypeRecord.h:568
ArrayRef< VFTableSlotKind > SlotsRef
Definition TypeRecord.h:582
VFTableShapeRecord(ArrayRef< VFTableSlotKind > Slots)
Definition TypeRecord.h:569
ArrayRef< VFTableSlotKind > getSlots() const
Definition TypeRecord.h:574
std::vector< VFTableSlotKind > Slots
Definition TypeRecord.h:583
VirtualBaseClassRecord(TypeRecordKind Kind, MemberAttributes Attrs, TypeIndex BaseType, TypeIndex VBPtrType, uint64_t Offset, uint64_t Index)
Definition TypeRecord.h:900
VirtualBaseClassRecord(TypeRecordKind Kind, MemberAccess Access, TypeIndex BaseType, TypeIndex VBPtrType, uint64_t Offset, uint64_t Index)
Definition TypeRecord.h:905
VirtualBaseClassRecord(TypeRecordKind Kind)
Definition TypeRecord.h:899
PointerMode
Equivalent to CV_ptrmode_e.
Definition CodeView.h:337
PointerOptions
Equivalent to misc lfPointerAttr bitfields.
Definition CodeView.h:346
MethodKind
Part of member attribute flags. (CV_methodprop_e)
Definition CodeView.h:254
PointerKind
Equivalent to CV_ptrtype_e.
Definition CodeView.h:320
PointerToMemberRepresentation
Equivalent to CV_pmtype_e.
Definition CodeView.h:360
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
Definition CodeView.h:156
MethodOptions
Equivalent to CV_fldattr_t bitfield.
Definition CodeView.h:265
MemberAccess
Source-level access specifier. (CV_access_e)
Definition CodeView.h:246
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
Definition CodeView.h:34
TypeRecordKind
Distinguishes individual records in .debug$T or .debug$P section or PDB type stream.
Definition CodeView.h:27
ModifierOptions
Equivalent to CV_modifier_t.
Definition CodeView.h:285
LabelType
Equivalent to CV_LABEL_TYPE_e.
Definition CodeView.h:278
detail::packed_endian_specific_integral< uint32_t, llvm::endianness::little, unaligned > ulittle32_t
Definition Endian.h:270
detail::packed_endian_specific_integral< uint16_t, llvm::endianness::little, unaligned > ulittle16_t
Definition Endian.h:267
detail::packed_endian_specific_integral< int32_t, llvm::endianness::little, unaligned > little32_t
Definition Endian.h:280
This is an optimization pass for GlobalISel generic memory operations.
@ Offset
Definition DWP.cpp:577
void append_range(Container &C, Range &&R)
Wrapper function to append range R to container C.
Definition STLExtras.h:2224
ArrayRef(const T &OneElt) -> ArrayRef< T >
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:1933
Implement std::hash so that hash_code can be used in STL containers.
Definition BitVector.h:878
ArrayRef< uint8_t > Data
Definition TypeRecord.h:36
This represents the 'GUID' type from windows.h.
Definition GUID.h:22
Equvalent to CV_fldattr_t in cvinfo.h.
Definition TypeRecord.h:40
constexpr bool operator==(const MemberAttributes &Rhs) const noexcept
Definition TypeRecord.h:58
bool isIntroducedVirtual() const
Does this member introduce a new virtual method.
Definition TypeRecord.h:90
bool isVirtual() const
Is this method virtual.
Definition TypeRecord.h:83
MemberAttributes(MemberAccess Access, MethodKind Kind, MethodOptions Flags)
Definition TypeRecord.h:52
MethodKind getMethodKind() const
Indicates if a method is defined with friend, virtual, static, etc.
Definition TypeRecord.h:68
MethodOptions getFlags() const
Get the flags that are not included in access control or method properties.
Definition TypeRecord.h:76
MemberAccess getAccess() const
Get the access specifier. Valid for any kind of member.
Definition TypeRecord.h:63
bool isStatic() const
Is this method static.
Definition TypeRecord.h:97
MemberAttributes(MemberAccess Access)
Definition TypeRecord.h:49
UnionRecord(uint64_t MemberCount, ClassOptions Options, TypeIndex FieldList, uint64_t Size, StringRef Name, StringRef UniqueName)
Definition TypeRecord.h:509
uint64_t getSize() const
Definition TypeRecord.h:525
UnionRecord(TypeRecordKind Kind, uint64_t MemberCount, ClassOptions Options, TypeIndex FieldList, uint64_t Size, StringRef Name, StringRef UniqueName)
Definition TypeRecord.h:513
UnionRecord(TypeRecordKind Kind)
Definition TypeRecord.h:508