llvm.org GIT mirror llvm / 57f9d8e
[PDB] Add a test that verifies every known type record. We had a lot of one-off tests for this type and that type, or "every type that happens to be generated by this program I built". Eventually I got a bug report filed where we were crashing on a type that was not covered by any of these tests. So this test carefully constructs a minimal C++ program that will cause every type we support to be emitted. This ensures full coverage for type records. Differential Revision: https://reviews.llvm.org/D34915 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307187 91177308-0d34-0410-b5e6-96231b3b80d8 Zachary Turner 3 years ago
10 changed file(s) with 627 addition(s) and 57 deletion(s). Raw diff Collapse all Expand all
0 // Build with "cl.exe /Zi /GR- /GX- every-type.cpp /link /debug /nodefaultlib /entry:main"
1
2 // clang-format off
3 void *__purecall = 0;
4
5 void __cdecl operator delete(void *,unsigned int) {}
6
7 struct FooStruct { }; // LF_STRUCTURE
8
9 class FooClass { // LF_CLASS
10 // LF_FIELDLIST
11 enum NestedEnum { // LF_ENUM
12 // LF_NESTTYPE
13 A, B, C // LF_ENUMERATE
14 };
15
16 void RegularMethod() {} // LF_ARGLIST
17 // LF_ONEMETHOD
18 // LF_MFUNCTION
19
20 void OverloadedMethod(int) {} // LF_METHODLIST
21 // LF_METHOD
22 void OverloadedMethod(int, int) {}
23
24 int HiNibble : 4; // LF_BITFIELD
25 int LoNibble : 4;
26 NestedEnum EnumVariable; // LF_MEMBER
27 static void *StaticMember; // LF_POINTER
28 // LF_STMEMBER
29 };
30
31 void *FooClass::StaticMember = nullptr;
32
33 class Inherit : public FooClass { // LF_BCLASS
34 public:
35 virtual ~Inherit() {} // LF_VTSHAPE
36 // LF_VFUNCTAB
37 };
38
39 class VInherit : public virtual FooClass { // LF_VBCLASS
40
41 };
42
43 class IVInherit : public VInherit { // LF_IVBCLASS
44 };
45
46 union TheUnion {
47 int X; // LF_UNION
48 };
49
50 int SomeArray[7] = {1, 2, 3, 4, 5, 6, 7}; // LF_ARRAY
51
52 int main(int argc, char **argv) { // LF_PROCEDURE
53 const int X = 7; // LF_MODIFIER
54
55 FooStruct FooStructInstance;
56 FooClass FooClassInstance;
57 Inherit InheritInstance;
58 VInherit VInheritInstance;
59 IVInherit IVInheritInstance;
60 TheUnion UnionInstance;
61 return SomeArray[argc];
62 }
0 ---
1 TpiStream:
2 Records:
3 # int* [Index: 0x1000]
4 - Kind: LF_POINTER
5 Pointer:
6 ReferentType: 116 # int
7 Attrs: 32778
8 # const int* [Index: 0x1001]
9 - Kind: LF_MODIFIER
10 Modifier:
11 ModifiedType: 0x1000
12 Modifiers: [ Const ]
13 # char* [Index: 0x1002]
14 - Kind: LF_POINTER
15 Pointer:
16 ReferentType: 1136 # char*
17 Attrs: 32778
18 # (int, char **) [Index: 0x1003]
19 - Kind: LF_ARGLIST
20 ArgList:
21 ArgIndicies: [ 116, 0x1002 ]
22 # (int, double) [Index: 0x1004]
23 - Kind: LF_ARGLIST
24 ArgList:
25 ArgIndicies: [ 116, 65 ] # (int, double)
26 # int main(int argc, char **argv) [Index: 0x1005]
27 - Kind: LF_PROCEDURE
28 Procedure:
29 ReturnType: 117 # int
30 CallConv: NearC # __cdecl
31 Options: [ None ]
32 ParameterCount: 2
33 ArgumentList: 0x1003 # (int, char**)
34 #
35 - Kind: LF_LABEL
36 Label:
37 Mode: Near
38 #
39 # class FooClass; [Index: 0x1007]
40 - Kind: LF_STRUCTURE
41 Class:
42 MemberCount: 0
43 Options: [ None, ForwardReference ]
44 FieldList: 0
45 Name: 'FooClass'
46 DerivationList: 0
47 VTableShape: 0
48 Size: 0
49 # char* [Index: 0x1008]
50 - Kind: LF_POINTER
51 Pointer:
52 ReferentType: 0x1007 # FooClass
53 Attrs: 33802 # const
54 # int (FooClass::)(int, char **) [Index: 0x1009]
55 - Kind: LF_MFUNCTION
56 MemberFunction:
57 ReturnType: 116 # int
58 ClassType: 0x1007 # FooClass
59 ThisType: 0x1008 # const FooClass*
60 CallConv: ThisCall
61 Options: [ None ]
62 ParameterCount: 2
63 ArgumentList: 0x1003 # (int, char**)
64 ThisPointerAdjustment: 0
65 # int (FooClass::)(int, double) [Index: 0x100A]
66 - Kind: LF_MFUNCTION
67 MemberFunction:
68 ReturnType: 116 # int
69 ClassType: 0x1007 # FooClass
70 ThisType: 0x1008 # const FooClass*
71 CallConv: ThisCall
72 Options: [ None ]
73 ParameterCount: 2
74 ArgumentList: 0x1004 # (int, double)
75 ThisPointerAdjustment: 0
76 #
77 # int (FooClass::)(int, char **)
78 # int (FooClass::)(int, double) [Index: 0x100B]
79 - Kind: LF_METHODLIST
80 MethodOverloadList:
81 Methods:
82 - Type: 0x1009 # int (FooClass::)(int, char **)
83 Attrs: 3 # public
84 VFTableOffset: -1
85 Name: ''
86 - Type: 0x100A # int (FooClass::)(int, double)
87 Attrs: 3 # public
88 VFTableOffset: -1
89 Name: ''
90 #
91 # A, B, C [Index: 0x100C]
92 - Kind: LF_FIELDLIST
93 FieldList:
94 - Kind: LF_ENUMERATE
95 Enumerator:
96 Attrs: 3
97 Value: 0
98 Name: A
99 - Kind: LF_ENUMERATE
100 Enumerator:
101 Attrs: 3
102 Value: 1
103 Name: B
104 - Kind: LF_ENUMERATE
105 Enumerator:
106 Attrs: 3
107 Value: 2
108 Name: C
109 # enum FooClass::Enum : uint32_t {
110 # A, B, C
111 # }; [Index: 0x100D]
112 - Kind: LF_ENUM
113 Enum:
114 NumEnumerators: 3
115 Options: [ None, Nested ]
116 FieldList: 0x100C
117 Name: 'FooClass::Enum'
118 UnderlyingType: 117
119 #
120 # public:
121 # enum FooEnum : uint32_t {
122 # A, B, C
123 # };
124 # FooEnum EnumMember;
125 # static int StaticInt;
126 # int FooClass::OverloadedMethod(int, char **);
127 # int FooClass::OverloadedMethod(int, double);
128 # int FooClass::RegularMethod(int, double);
129 # [Index: 0x100E]
130 - Kind: LF_FIELDLIST
131 FieldList:
132 # enum FooEnum : uint32_t {
133 # A, B, C
134 # };
135 - Kind: LF_NESTTYPE
136 NestedType:
137 Type: 0x100D
138 Name: FooEnum
139 # FooEnum EnumMember;
140 - Kind: LF_MEMBER
141 DataMember:
142 Attrs: 3 # public
143 Type: 0x100D # void*
144 FieldOffset: 0
145 Name: EnumMember
146 # static int StaticInt;
147 - Kind: LF_STMEMBER
148 StaticDataMember:
149 Attrs: 3 # public
150 Type: 116 # int
151 Name: StaticInt
152 # int FooClass::OverloadedMethod(int, char **);
153 # int FooClass::OverloadedMethod(int, double);
154 - Kind: LF_METHOD
155 OverloadedMethod:
156 NumOverloads: 2
157 MethodList: 0x100B
158 Name: OverloadedMethod
159 # int FooClass::RegularMethod(int, double);
160 - Kind: LF_ONEMETHOD
161 OneMethod:
162 Type: 0x100A
163 Attrs: 3 # public
164 VFTableOffset: -1
165 Name: RegularMethod
166 # class FooClass {
167 # public:
168 # enum FooEnum : uint32_t {
169 # A, B, C
170 # };
171 # FooEnum EnumMember;
172 # static int StaticInt;
173 # int FooClass::OverloadedMethod(int, char **);
174 # int FooClass::OverloadedMethod(int, double);
175 # int FooClass::RegularMethod(int, double);
176 # }; [Index: 0x100F]
177 - Kind: LF_CLASS
178 Class:
179 MemberCount: 6
180 Options: [ None ]
181 FieldList: 0x100E
182 Name: 'FooClass'
183 DerivationList: 0
184 VTableShape: 0
185 Size: 4
186 # struct FooStructure; [Index: 0x1010]
187 - Kind: LF_STRUCTURE
188 Class:
189 MemberCount: 6
190 Options: [ None ]
191 FieldList: 0x100E
192 Name: 'FooStructure'
193 DerivationList: 0
194 VTableShape: 0
195 Size: 4
196 # interface FooInterface; [Index: 0x1011]
197 - Kind: LF_INTERFACE
198 Class:
199 MemberCount: 6
200 Options: [ None ]
201 FieldList: 0x100E
202 Name: 'FooInterface'
203 DerivationList: 0
204 VTableShape: 0
205 Size: 4
206 #
207 # : public FooClass [Index: 0x1012]
208 - Kind: LF_FIELDLIST
209 FieldList:
210 - Kind: LF_BCLASS
211 Attrs: 3 # public
212 Type: 0x100F # FooClass
213 Offset: 0
214 #
215 # : public virtual FooClass [Index: 0x1013]
216 - Kind: LF_FIELDLIST
217 FieldList:
218 - Kind: LF_VBCLASS
219 Attrs: 3 # public
220 BaseType: 0x100F # FooClass
221 VBPtrType: 0x1001 # const int *
222 VBPtrOffset: 0
223 VTableIndex: 1
224 # class Inherit : public FooClass {}; [Index: 0x1014]
225 - Kind: LF_STRUCTURE
226 Class:
227 MemberCount: 1
228 Options: [ None ]
229 FieldList: 0x100E
230 Name: 'Inherit'
231 DerivationList: 0x1012
232 VTableShape: 0
233 Size: 4
234 # class VInherit : public virtual FooClass {}; [Index: 0x1015]
235 - Kind: LF_STRUCTURE
236 Class:
237 MemberCount: 1
238 Options: [ None ]
239 FieldList: 0x100E
240 Name: 'Inherit'
241 DerivationList: 0x1012
242 VTableShape: 0
243 Size: 4
244
245 # // Member type records. These are generally not length prefixed, and appear
246 # // inside of a field list record.
247 # MEMBER_RECORD(LF_VFUNCTAB, 0x1409, VFPtr)
248
249 # MEMBER_RECORD_ALIAS(LF_BINTERFACE, 0x151a, BaseInterface, BaseClass)
250
251 # MEMBER_RECORD_ALIAS(LF_IVBCLASS, 0x1402, IndirectVirtualBaseClass,
252 # VirtualBaseClass)
253
254
255 # TYPE_RECORD(LF_ARRAY, 0x1503, Array)
256 # TYPE_RECORD(LF_UNION, 0x1506, Union)
257 # TYPE_RECORD(LF_TYPESERVER2, 0x1515, TypeServer2)
258 # TYPE_RECORD(LF_VFTABLE, 0x151d, VFTable)
259 # TYPE_RECORD(LF_VTSHAPE, 0x000a, VFTableShape)
260
261 # TYPE_RECORD(LF_BITFIELD, 0x1205, BitField)
262
263
264 # // ID leaf records. Subsequent leaf types may be referenced from .debug$S.
265 # TYPE_RECORD(LF_FUNC_ID, 0x1601, FuncId)
266 # TYPE_RECORD(LF_MFUNC_ID, 0x1602, MemberFuncId)
267 # TYPE_RECORD(LF_BUILDINFO, 0x1603, BuildInfo)
268 # TYPE_RECORD(LF_SUBSTR_LIST, 0x1604, StringList)
269 # TYPE_RECORD(LF_STRING_ID, 0x1605, StringId)
270 # TYPE_RECORD(LF_UDT_SRC_LINE, 0x1606, UdtSourceLine)
271 # TYPE_RECORD(LF_UDT_MOD_SRC_LINE, 0x1607, UdtModSourceLine)
0 The test input (every-type.pdb) is generated from some short and trivial C++ code
1 that exercises the entire type system to generate every possible type record that
2 we claim to understand. We then test this in two ways:
3 1) We just dump the output for the purposes of readability. This tests that we
4 we can dump every possible type record.
5 2) We dump the output to yaml, and then re-generate a PDB with the same type
6 stream, and then run test 1 on the new PDB. This verifies that the PDB
7 hasn't changed.
8
9
10 RUN: llvm-pdbutil dump -type-index=0x1018,0x102A,0x103B,0x1093,0x1095,0x1096,0x1098 \
11 RUN: -dependents %p/Inputs/every-type.pdb | FileCheck --check-prefix=TYPES %s
12
13 RUN: llvm-pdbutil pdb2yaml -tpi-stream -ipi-stream %p/Inputs/every-type.pdb > %t.pdb.yaml
14 RUN: llvm-pdbutil yaml2pdb -pdb=%t.yaml.pdb %t.pdb.yaml
15 RUN: llvm-pdbutil dump -type-index=0x1018,0x102A,0x103B,0x1093,0x1095,0x1096,0x1098 \
16 RUN: -dependents %t.yaml.pdb | FileCheck --check-prefix=TYPES %s
17
18 TYPES: Types (TPI Stream)
19 TYPES-NEXT: ============================================================
20 TYPES-NEXT: Showing 7 records and their dependents (73 records total)
21 TYPES-NEXT: 0x1005 | LF_MODIFIER [size = 12]
22 TYPES-NEXT: referent = 0x0074 (int), modifiers = const
23 TYPES-NEXT: 0x1006 | LF_CLASS [size = 48] `FooClass`
24 TYPES-NEXT: unique name: `.?AVFooClass@@`
25 TYPES-NEXT: vtable: , base list: , field list:
26 TYPES-NEXT: options: forward ref | has unique name
27 TYPES-NEXT: 0x1007 | LF_VTSHAPE [size = 8]
28 TYPES-NEXT: 0x1008 | LF_POINTER [size = 12]
29 TYPES-NEXT: referent = 0x1007, mode = pointer, opts = None, kind = ptr32
30 TYPES-NEXT: 0x1009 | LF_CLASS [size = 44] `Inherit`
31 TYPES-NEXT: unique name: `.?AVInherit@@`
32 TYPES-NEXT: vtable: , base list: , field list:
33 TYPES-NEXT: options: forward ref | has unique name
34 TYPES-NEXT: 0x100A | LF_POINTER [size = 12]
35 TYPES-NEXT: referent = 0x1009, mode = pointer, opts = const, kind = ptr32
36 TYPES-NEXT: 0x100B | LF_ARGLIST [size = 8]
37 TYPES-NEXT: 0x100C | LF_MFUNCTION [size = 28]
38 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B
39 TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0
40 TYPES-NEXT: calling conv = thiscall, options = None
41 TYPES-NEXT: 0x100D | LF_MODIFIER [size = 12]
42 TYPES-NEXT: referent = 0x1009, modifiers = const
43 TYPES-NEXT: 0x100E | LF_POINTER [size = 12]
44 TYPES-NEXT: referent = 0x100D, mode = ref, opts = None, kind = ptr32
45 TYPES-NEXT: 0x100F | LF_ARGLIST [size = 12]
46 TYPES-NEXT: 0x100E: `const Inherit&`
47 TYPES-NEXT: 0x1010 | LF_MFUNCTION [size = 28]
48 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x100F
49 TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0
50 TYPES-NEXT: calling conv = thiscall, options = constructor
51 TYPES-NEXT: 0x1011 | LF_MFUNCTION [size = 28]
52 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B
53 TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0
54 TYPES-NEXT: calling conv = thiscall, options = constructor
55 TYPES-NEXT: 0x1012 | LF_METHODLIST [size = 20]
56 TYPES-NEXT: - Method [type = 0x1010, vftable offset = -1, attrs = public compiler-generated]
57 TYPES-NEXT: - Method [type = 0x1011, vftable offset = -1, attrs = public compiler-generated]
58 TYPES-NEXT: 0x1013 | LF_POINTER [size = 12]
59 TYPES-NEXT: referent = 0x1009, mode = ref, opts = None, kind = ptr32
60 TYPES-NEXT: 0x1014 | LF_MFUNCTION [size = 28]
61 TYPES-NEXT: return type = 0x1013, # args = 1, param list = 0x100F
62 TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0
63 TYPES-NEXT: calling conv = thiscall, options = None
64 TYPES-NEXT: 0x1015 | LF_ARGLIST [size = 12]
65 TYPES-NEXT: 0x0075 (unsigned): `unsigned`
66 TYPES-NEXT: 0x1016 | LF_MFUNCTION [size = 28]
67 TYPES-NEXT: return type = 0x0403 (void*), # args = 1, param list = 0x1015
68 TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0
69 TYPES-NEXT: calling conv = thiscall, options = None
70 TYPES-NEXT: 0x1017 | LF_FIELDLIST [size = 152]
71 TYPES-NEXT: - LF_BCLASS
72 TYPES-NEXT: type = 0x1006, offset = 4, attrs = public
73 TYPES-NEXT: - LF_VFUNCTAB type = 0x1008
74 TYPES-NEXT: - LF_ONEMETHOD [name = `~Inherit`]
75 TYPES-NEXT: type = 0x100C, vftable offset = 0, attrs = public intro virtual
76 TYPES-NEXT: - LF_METHOD [name = `Inherit`, # overloads = 2, overload list = 0x1012]
77 TYPES-NEXT: - LF_ONEMETHOD [name = `operator=`]
78 TYPES-NEXT: type = 0x1014, vftable offset = -1, attrs = public compiler-generated
79 TYPES-NEXT: - LF_ONEMETHOD [name = `__local_vftable_ctor_closure`]
80 TYPES-NEXT: type = 0x100C, vftable offset = -1, attrs = public compiler-generated
81 TYPES-NEXT: - LF_ONEMETHOD [name = `__vecDelDtor`]
82 TYPES-NEXT: type = 0x1016, vftable offset = 0, attrs = public intro virtual compiler-generated
83 TYPES-NEXT: 0x1018 | LF_CLASS [size = 44] `Inherit`
84 TYPES-NEXT: unique name: `.?AVInherit@@`
85 TYPES-NEXT: vtable: 0x1007, base list: , field list: 0x1017
86 TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=
87 TYPES-NEXT: 0x1019 | LF_POINTER [size = 12]
88 TYPES-NEXT: referent = 0x1005, mode = pointer, opts = None, kind = ptr32
89 TYPES-NEXT: 0x101A | LF_CLASS [size = 48] `VInherit`
90 TYPES-NEXT: unique name: `.?AVVInherit@@`
91 TYPES-NEXT: vtable: , base list: , field list:
92 TYPES-NEXT: options: forward ref | has unique name
93 TYPES-NEXT: 0x101B | LF_POINTER [size = 12]
94 TYPES-NEXT: referent = 0x101A, mode = pointer, opts = const, kind = ptr32
95 TYPES-NEXT: 0x101C | LF_POINTER [size = 12]
96 TYPES-NEXT: referent = 0x101A, mode = rvalue ref, opts = None, kind = ptr32
97 TYPES-NEXT: 0x101D | LF_ARGLIST [size = 12]
98 TYPES-NEXT: 0x101C: `VInherit&&`
99 TYPES-NEXT: 0x101E | LF_MFUNCTION [size = 28]
100 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x101D
101 TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0
102 TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor
103 TYPES-NEXT: 0x101F | LF_MODIFIER [size = 12]
104 TYPES-NEXT: referent = 0x101A, modifiers = const
105 TYPES-NEXT: 0x1020 | LF_POINTER [size = 12]
106 TYPES-NEXT: referent = 0x101F, mode = ref, opts = None, kind = ptr32
107 TYPES-NEXT: 0x1021 | LF_ARGLIST [size = 12]
108 TYPES-NEXT: 0x1020: `const VInherit&`
109 TYPES-NEXT: 0x1022 | LF_MFUNCTION [size = 28]
110 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1021
111 TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0
112 TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor
113 TYPES-NEXT: 0x1023 | LF_MFUNCTION [size = 28]
114 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B
115 TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0
116 TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor
117 TYPES-NEXT: 0x1024 | LF_METHODLIST [size = 28]
118 TYPES-NEXT: - Method [type = 0x101E, vftable offset = -1, attrs = public compiler-generated]
119 TYPES-NEXT: - Method [type = 0x1022, vftable offset = -1, attrs = public compiler-generated]
120 TYPES-NEXT: - Method [type = 0x1023, vftable offset = -1, attrs = public compiler-generated]
121 TYPES-NEXT: 0x1025 | LF_POINTER [size = 12]
122 TYPES-NEXT: referent = 0x101A, mode = ref, opts = None, kind = ptr32
123 TYPES-NEXT: 0x1026 | LF_MFUNCTION [size = 28]
124 TYPES-NEXT: return type = 0x1025, # args = 1, param list = 0x101D
125 TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0
126 TYPES-NEXT: calling conv = thiscall, options = None
127 TYPES-NEXT: 0x1027 | LF_MFUNCTION [size = 28]
128 TYPES-NEXT: return type = 0x1025, # args = 1, param list = 0x1021
129 TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0
130 TYPES-NEXT: calling conv = thiscall, options = None
131 TYPES-NEXT: 0x1028 | LF_METHODLIST [size = 20]
132 TYPES-NEXT: - Method [type = 0x1026, vftable offset = -1, attrs = public compiler-generated]
133 TYPES-NEXT: - Method [type = 0x1027, vftable offset = -1, attrs = public compiler-generated]
134 TYPES-NEXT: 0x1029 | LF_FIELDLIST [size = 60]
135 TYPES-NEXT: - LF_VBCLASS
136 TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1
137 TYPES-NEXT: attrs = public
138 TYPES-NEXT: - LF_METHOD [name = `VInherit`, # overloads = 3, overload list = 0x1024]
139 TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x1028]
140 TYPES-NEXT: 0x102A | LF_CLASS [size = 48] `VInherit`
141 TYPES-NEXT: unique name: `.?AVVInherit@@`
142 TYPES-NEXT: vtable: , base list: , field list: 0x1029
143 TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=
144 TYPES-NEXT: 0x102B | LF_CLASS [size = 48] `IVInherit`
145 TYPES-NEXT: unique name: `.?AVIVInherit@@`
146 TYPES-NEXT: vtable: , base list: , field list:
147 TYPES-NEXT: options: forward ref | has unique name
148 TYPES-NEXT: 0x102C | LF_POINTER [size = 12]
149 TYPES-NEXT: referent = 0x102B, mode = pointer, opts = const, kind = ptr32
150 TYPES-NEXT: 0x102D | LF_POINTER [size = 12]
151 TYPES-NEXT: referent = 0x102B, mode = rvalue ref, opts = None, kind = ptr32
152 TYPES-NEXT: 0x102E | LF_ARGLIST [size = 12]
153 TYPES-NEXT: 0x102D: `IVInherit&&`
154 TYPES-NEXT: 0x102F | LF_MFUNCTION [size = 28]
155 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x102E
156 TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0
157 TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor
158 TYPES-NEXT: 0x1030 | LF_MODIFIER [size = 12]
159 TYPES-NEXT: referent = 0x102B, modifiers = const
160 TYPES-NEXT: 0x1031 | LF_POINTER [size = 12]
161 TYPES-NEXT: referent = 0x1030, mode = ref, opts = None, kind = ptr32
162 TYPES-NEXT: 0x1032 | LF_ARGLIST [size = 12]
163 TYPES-NEXT: 0x1031: `const IVInherit&`
164 TYPES-NEXT: 0x1033 | LF_MFUNCTION [size = 28]
165 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1032
166 TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0
167 TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor
168 TYPES-NEXT: 0x1034 | LF_MFUNCTION [size = 28]
169 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B
170 TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0
171 TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor
172 TYPES-NEXT: 0x1035 | LF_METHODLIST [size = 28]
173 TYPES-NEXT: - Method [type = 0x102F, vftable offset = -1, attrs = public compiler-generated]
174 TYPES-NEXT: - Method [type = 0x1033, vftable offset = -1, attrs = public compiler-generated]
175 TYPES-NEXT: - Method [type = 0x1034, vftable offset = -1, attrs = public compiler-generated]
176 TYPES-NEXT: 0x1036 | LF_POINTER [size = 12]
177 TYPES-NEXT: referent = 0x102B, mode = ref, opts = None, kind = ptr32
178 TYPES-NEXT: 0x1037 | LF_MFUNCTION [size = 28]
179 TYPES-NEXT: return type = 0x1036, # args = 1, param list = 0x102E
180 TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0
181 TYPES-NEXT: calling conv = thiscall, options = None
182 TYPES-NEXT: 0x1038 | LF_MFUNCTION [size = 28]
183 TYPES-NEXT: return type = 0x1036, # args = 1, param list = 0x1032
184 TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0
185 TYPES-NEXT: calling conv = thiscall, options = None
186 TYPES-NEXT: 0x1039 | LF_METHODLIST [size = 20]
187 TYPES-NEXT: - Method [type = 0x1037, vftable offset = -1, attrs = public compiler-generated]
188 TYPES-NEXT: - Method [type = 0x1038, vftable offset = -1, attrs = public compiler-generated]
189 TYPES-NEXT: 0x103A | LF_FIELDLIST [size = 72]
190 TYPES-NEXT: - LF_BCLASS
191 TYPES-NEXT: type = 0x101A, offset = 0, attrs = public
192 TYPES-NEXT: - LF_IVBCLASS
193 TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1
194 TYPES-NEXT: attrs = public
195 TYPES-NEXT: - LF_METHOD [name = `IVInherit`, # overloads = 3, overload list = 0x1035]
196 TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x1039]
197 TYPES-NEXT: 0x103B | LF_CLASS [size = 48] `IVInherit`
198 TYPES-NEXT: unique name: `.?AVIVInherit@@`
199 TYPES-NEXT: vtable: , base list: , field list: 0x103A
200 TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=
201 TYPES-NEXT: 0x1087 | LF_FIELDLIST [size = 28]
202 TYPES-NEXT: - LF_ENUMERATE [A = 0]
203 TYPES-NEXT: - LF_ENUMERATE [B = 1]
204 TYPES-NEXT: - LF_ENUMERATE [C = 2]
205 TYPES-NEXT: 0x1088 | LF_ENUM [size = 64] `FooClass::NestedEnum`
206 TYPES-NEXT: unique name: `.?AW4NestedEnum@FooClass@@`
207 TYPES-NEXT: field list: 0x1087, underlying type: 0x0074 (int)
208 TYPES-NEXT: options: has unique name | is nested
209 TYPES-NEXT: 0x1089 | LF_POINTER [size = 12]
210 TYPES-NEXT: referent = 0x1006, mode = pointer, opts = const, kind = ptr32
211 TYPES-NEXT: 0x108A | LF_MFUNCTION [size = 28]
212 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B
213 TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0
214 TYPES-NEXT: calling conv = thiscall, options = None
215 TYPES-NEXT: 0x108B | LF_ARGLIST [size = 16]
216 TYPES-NEXT: 0x0074 (int): `int`
217 TYPES-NEXT: 0x0074 (int): `int`
218 TYPES-NEXT: 0x108C | LF_MFUNCTION [size = 28]
219 TYPES-NEXT: return type = 0x0003 (void), # args = 2, param list = 0x108B
220 TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0
221 TYPES-NEXT: calling conv = thiscall, options = None
222 TYPES-NEXT: 0x108D | LF_ARGLIST [size = 12]
223 TYPES-NEXT: 0x0074 (int): `int`
224 TYPES-NEXT: 0x108E | LF_MFUNCTION [size = 28]
225 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x108D
226 TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0
227 TYPES-NEXT: calling conv = thiscall, options = None
228 TYPES-NEXT: 0x108F | LF_METHODLIST [size = 20]
229 TYPES-NEXT: - Method [type = 0x108C, vftable offset = -1, attrs = private]
230 TYPES-NEXT: - Method [type = 0x108E, vftable offset = -1, attrs = private]
231 TYPES-NEXT: 0x1090 | LF_BITFIELD [size = 12]
232 TYPES-NEXT: type = 0x0074 (int), bit offset = 0, # bits = 4
233 TYPES-NEXT: 0x1091 | LF_BITFIELD [size = 12]
234 TYPES-NEXT: type = 0x0074 (int), bit offset = 4, # bits = 4
235 TYPES-NEXT: 0x1092 | LF_FIELDLIST [size = 164]
236 TYPES-NEXT: - LF_NESTTYPE [name = `NestedEnum`, parent = 0x1088]
237 TYPES-NEXT: - LF_ONEMETHOD [name = `RegularMethod`]
238 TYPES-NEXT: type = 0x108A, vftable offset = -1, attrs = private
239 TYPES-NEXT: - LF_METHOD [name = `OverloadedMethod`, # overloads = 2, overload list = 0x108F]
240 TYPES-NEXT: - LF_MEMBER [name = `HiNibble`, Type = 0x1090, offset = 0, attrs = private]
241 TYPES-NEXT: - LF_MEMBER [name = `LoNibble`, Type = 0x1091, offset = 0, attrs = private]
242 TYPES-NEXT: - LF_MEMBER [name = `EnumVariable`, Type = 0x1088, offset = 4, attrs = private]
243 TYPES-NEXT: - LF_STMEMBER [name = `StaticMember`, type = 0x0403 (void*), attrs = private]
244 TYPES-NEXT: 0x1093 | LF_CLASS [size = 48] `FooClass`
245 TYPES-NEXT: unique name: `.?AVFooClass@@`
246 TYPES-NEXT: vtable: , base list: , field list: 0x1092
247 TYPES-NEXT: options: contains nested class | has unique name
248 TYPES-NEXT: 0x1094 | LF_FIELDLIST [size = 16]
249 TYPES-NEXT: - LF_MEMBER [name = `X`, Type = 0x0074 (int), offset = 0, attrs = public]
250 TYPES-NEXT: 0x1095 | LF_UNION [size = 40] `TheUnion`
251 TYPES-NEXT: unique name: `.?ATTheUnion@@`
252 TYPES-NEXT: field list: 0x1094
253 TYPES-NEXT: options: has unique name | sealed
254 TYPES-NEXT: 0x1096 | LF_PROCEDURE [size = 16]
255 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B
256 TYPES-NEXT: calling conv = cdecl, options = None
257 TYPES-NEXT: 0x1097 | LF_POINTER [size = 12]
258 TYPES-NEXT: referent = 0x1096, mode = pointer, opts = const, kind = ptr32
259 TYPES-NEXT: 0x1098 | LF_ARRAY [size = 16]
260 TYPES-NEXT: size: 4, index type: 0x0022 (unsigned long), element type: 0x1097
9898 ALL-NEXT: - LF_ENUMERATE [free = 3]
9999 ALL-NEXT: - LF_ENUMERATE [neutral = 4]
100100 ALL-NEXT: - LF_ENUMERATE [both = 5]
101 ALL-NEXT: 0x1003 | LF_ENUM [size = 120, hash = 208239]
102 ALL-NEXT: name: `__vc_attributes::threadingAttribute::threading_e`
101 ALL-NEXT: 0x1003 | LF_ENUM [size = 120, hash = 208239] `__vc_attributes::threadingAttribute::threading_e`
103102 ALL-NEXT: unique name: `.?AW4threading_e@threadingAttribute@__vc_attributes@@`
104103 ALL-NEXT: field list: 0x1002, underlying type: 0x0074 (int)
105104 ALL-NEXT: options: has unique name | is nested
106 ALL-NEXT: 0x1004 | LF_STRUCTURE [size = 100, hash = 16377]
107 ALL-NEXT: class name: `__vc_attributes::threadingAttribute`
105 ALL-NEXT: 0x1004 | LF_STRUCTURE [size = 100, hash = 16377] `__vc_attributes::threadingAttribute`
108106 ALL-NEXT: unique name: `.?AUthreadingAttribute@__vc_attributes@@`
109107 ALL-NEXT: vtable: , base list: , field list:
110108 ALL-NEXT: options: forward ref | has unique name
127125 ALL-NEXT: - LF_NESTTYPE [name = `threading_e`, parent = 0x1003]
128126 ALL-NEXT: - LF_METHOD [name = `threadingAttribute`, # overloads = 2, overload list = 0x1009]
129127 ALL-NEXT: - LF_MEMBER [name = `value`, Type = 0x1003, offset = 0, attrs = public]
130 ALL-NEXT: 0x100B | LF_STRUCTURE [size = 100, hash = 119540]
131 ALL-NEXT: class name: `__vc_attributes::threadingAttribute`
128 ALL-NEXT: 0x100B | LF_STRUCTURE [size = 100, hash = 119540] `__vc_attributes::threadingAttribute`
132129 ALL-NEXT: unique name: `.?AUthreadingAttribute@__vc_attributes@@`
133130 ALL-NEXT: vtable: , base list: , field list: 0x100A
134131 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name
136133 ALL-NEXT: - LF_ENUMERATE [native = 0]
137134 ALL-NEXT: - LF_ENUMERATE [com = 1]
138135 ALL-NEXT: - LF_ENUMERATE [managed = 2]
139 ALL-NEXT: 0x100D | LF_ENUM [size = 120, hash = 198119]
140 ALL-NEXT: name: `__vc_attributes::event_receiverAttribute::type_e`
136 ALL-NEXT: 0x100D | LF_ENUM [size = 120, hash = 198119] `__vc_attributes::event_receiverAttribute::type_e`
141137 ALL-NEXT: unique name: `.?AW4type_e@event_receiverAttribute@__vc_attributes@@`
142138 ALL-NEXT: field list: 0x100C, underlying type: 0x0074 (int)
143139 ALL-NEXT: options: has unique name | is nested
144 ALL-NEXT: 0x100E | LF_STRUCTURE [size = 112, hash = 48056]
145 ALL-NEXT: class name: `__vc_attributes::event_receiverAttribute`
140 ALL-NEXT: 0x100E | LF_STRUCTURE [size = 112, hash = 48056] `__vc_attributes::event_receiverAttribute`
146141 ALL-NEXT: unique name: `.?AUevent_receiverAttribute@__vc_attributes@@`
147142 ALL-NEXT: vtable: , base list: , field list:
148143 ALL-NEXT: options: forward ref | has unique name
174169 ALL-NEXT: - LF_METHOD [name = `event_receiverAttribute`, # overloads = 3, overload list = 0x1015]
175170 ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x100D, offset = 0, attrs = public]
176171 ALL-NEXT: - LF_MEMBER [name = `layout_dependent`, Type = 0x0030 (bool), offset = 4, attrs = public]
177 ALL-NEXT: 0x1017 | LF_STRUCTURE [size = 112, hash = 148734]
178 ALL-NEXT: class name: `__vc_attributes::event_receiverAttribute`
172 ALL-NEXT: 0x1017 | LF_STRUCTURE [size = 112, hash = 148734] `__vc_attributes::event_receiverAttribute`
179173 ALL-NEXT: unique name: `.?AUevent_receiverAttribute@__vc_attributes@@`
180174 ALL-NEXT: vtable: , base list: , field list: 0x1016
181175 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name
183177 ALL-NEXT: - LF_ENUMERATE [never = 0]
184178 ALL-NEXT: - LF_ENUMERATE [allowed = 1]
185179 ALL-NEXT: - LF_ENUMERATE [always = 2]
186 ALL-NEXT: 0x1019 | LF_ENUM [size = 116, hash = 60158]
187 ALL-NEXT: name: `__vc_attributes::aggregatableAttribute::type_e`
180 ALL-NEXT: 0x1019 | LF_ENUM [size = 116, hash = 60158] `__vc_attributes::aggregatableAttribute::type_e`
188181 ALL-NEXT: unique name: `.?AW4type_e@aggregatableAttribute@__vc_attributes@@`
189182 ALL-NEXT: field list: 0x1018, underlying type: 0x0074 (int)
190183 ALL-NEXT: options: has unique name | is nested
191 ALL-NEXT: 0x101A | LF_STRUCTURE [size = 108, hash = 217249]
192 ALL-NEXT: class name: `__vc_attributes::aggregatableAttribute`
184 ALL-NEXT: 0x101A | LF_STRUCTURE [size = 108, hash = 217249] `__vc_attributes::aggregatableAttribute`
193185 ALL-NEXT: unique name: `.?AUaggregatableAttribute@__vc_attributes@@`
194186 ALL-NEXT: vtable: , base list: , field list:
195187 ALL-NEXT: options: forward ref | has unique name
212204 ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x1019]
213205 ALL-NEXT: - LF_METHOD [name = `aggregatableAttribute`, # overloads = 2, overload list = 0x101F]
214206 ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1019, offset = 0, attrs = public]
215 ALL-NEXT: 0x1021 | LF_STRUCTURE [size = 108, hash = 94935]
216 ALL-NEXT: class name: `__vc_attributes::aggregatableAttribute`
207 ALL-NEXT: 0x1021 | LF_STRUCTURE [size = 108, hash = 94935] `__vc_attributes::aggregatableAttribute`
217208 ALL-NEXT: unique name: `.?AUaggregatableAttribute@__vc_attributes@@`
218209 ALL-NEXT: vtable: , base list: , field list: 0x1020
219210 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name
220 ALL-NEXT: 0x1022 | LF_ENUM [size = 116, hash = 151449]
221 ALL-NEXT: name: `__vc_attributes::event_sourceAttribute::type_e`
211 ALL-NEXT: 0x1022 | LF_ENUM [size = 116, hash = 151449] `__vc_attributes::event_sourceAttribute::type_e`
222212 ALL-NEXT: unique name: `.?AW4type_e@event_sourceAttribute@__vc_attributes@@`
223213 ALL-NEXT: field list: 0x100C, underlying type: 0x0074 (int)
224214 ALL-NEXT: options: has unique name | is nested
225215 ALL-NEXT: 0x1023 | LF_FIELDLIST [size = 28, hash = 135589]
226216 ALL-NEXT: - LF_ENUMERATE [speed = 0]
227217 ALL-NEXT: - LF_ENUMERATE [size = 1]
228 ALL-NEXT: 0x1024 | LF_ENUM [size = 124, hash = 73373]
229 ALL-NEXT: name: `__vc_attributes::event_sourceAttribute::optimize_e`
218 ALL-NEXT: 0x1024 | LF_ENUM [size = 124, hash = 73373] `__vc_attributes::event_sourceAttribute::optimize_e`
230219 ALL-NEXT: unique name: `.?AW4optimize_e@event_sourceAttribute@__vc_attributes@@`
231220 ALL-NEXT: field list: 0x1023, underlying type: 0x0074 (int)
232221 ALL-NEXT: options: has unique name | is nested
233 ALL-NEXT: 0x1025 | LF_STRUCTURE [size = 108, hash = 96512]
234 ALL-NEXT: class name: `__vc_attributes::event_sourceAttribute`
222 ALL-NEXT: 0x1025 | LF_STRUCTURE [size = 108, hash = 96512] `__vc_attributes::event_sourceAttribute`
235223 ALL-NEXT: unique name: `.?AUevent_sourceAttribute@__vc_attributes@@`
236224 ALL-NEXT: vtable: , base list: , field list:
237225 ALL-NEXT: options: forward ref | has unique name
257245 ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1022, offset = 0, attrs = public]
258246 ALL-NEXT: - LF_MEMBER [name = `optimize`, Type = 0x1024, offset = 4, attrs = public]
259247 ALL-NEXT: - LF_MEMBER [name = `decorate`, Type = 0x0030 (bool), offset = 8, attrs = public]
260 ALL-NEXT: 0x102C | LF_STRUCTURE [size = 108, hash = 238560]
261 ALL-NEXT: class name: `__vc_attributes::event_sourceAttribute`
248 ALL-NEXT: 0x102C | LF_STRUCTURE [size = 108, hash = 238560] `__vc_attributes::event_sourceAttribute`
262249 ALL-NEXT: unique name: `.?AUevent_sourceAttribute@__vc_attributes@@`
263250 ALL-NEXT: vtable: , base list: , field list: 0x102B
264251 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name
269256 ALL-NEXT: - LF_ENUMERATE [unspecified = 4]
270257 ALL-NEXT: - LF_ENUMERATE [EXE = 2]
271258 ALL-NEXT: - LF_ENUMERATE [SERVICE = 3]
272 ALL-NEXT: 0x102E | LF_ENUM [size = 104, hash = 115151]
273 ALL-NEXT: name: `__vc_attributes::moduleAttribute::type_e`
259 ALL-NEXT: 0x102E | LF_ENUM [size = 104, hash = 115151] `__vc_attributes::moduleAttribute::type_e`
274260 ALL-NEXT: unique name: `.?AW4type_e@moduleAttribute@__vc_attributes@@`
275261 ALL-NEXT: field list: 0x102D, underlying type: 0x0074 (int)
276262 ALL-NEXT: options: has unique name | is nested
277 ALL-NEXT: 0x102F | LF_STRUCTURE [size = 96, hash = 197306]
278 ALL-NEXT: class name: `__vc_attributes::moduleAttribute`
263 ALL-NEXT: 0x102F | LF_STRUCTURE [size = 96, hash = 197306] `__vc_attributes::moduleAttribute`
279264 ALL-NEXT: unique name: `.?AUmoduleAttribute@__vc_attributes@@`
280265 ALL-NEXT: vtable: , base list: , field list:
281266 ALL-NEXT: options: forward ref | has unique name
337322 ALL-NEXT: - LF_MEMBER [name = `restricted`, Type = 0x0030 (bool), offset = 45, attrs = public]
338323 ALL-NEXT: - LF_MEMBER [name = `custom`, Type = 0x1032, offset = 48, attrs = public]
339324 ALL-NEXT: - LF_MEMBER [name = `resource_name`, Type = 0x1032, offset = 52, attrs = public]
340 ALL-NEXT: 0x103A | LF_STRUCTURE [size = 96, hash = 98548]
341 ALL-NEXT: class name: `__vc_attributes::moduleAttribute`
325 ALL-NEXT: 0x103A | LF_STRUCTURE [size = 96, hash = 98548] `__vc_attributes::moduleAttribute`
342326 ALL-NEXT: unique name: `.?AUmoduleAttribute@__vc_attributes@@`
343327 ALL-NEXT: vtable: , base list: , field list: 0x1039
344328 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name
373357 ALL-NEXT: - LF_ENUMERATE [eIllegalUsage = 33554432]
374358 ALL-NEXT: - LF_ENUMERATE [eAsynchronousUsage = 67108864]
375359 ALL-NEXT: - LF_ENUMERATE [eAnyIDLUsage = 4161535]
376 ALL-NEXT: 0x103C | LF_ENUM [size = 140, hash = 171328]
377 ALL-NEXT: name: `__vc_attributes::helper_attributes::usageAttribute::usage_e`
360 ALL-NEXT: 0x103C | LF_ENUM [size = 140, hash = 171328] `__vc_attributes::helper_attributes::usageAttribute::usage_e`
378361 ALL-NEXT: unique name: `.?AW4usage_e@usageAttribute@helper_attributes@__vc_attributes@@`
379362 ALL-NEXT: field list: 0x103B, underlying type: 0x0074 (int)
380363 ALL-NEXT: options: has unique name | is nested
381 ALL-NEXT: 0x103D | LF_STRUCTURE [size = 128, hash = 203640]
382 ALL-NEXT: class name: `__vc_attributes::helper_attributes::usageAttribute`
364 ALL-NEXT: 0x103D | LF_STRUCTURE [size = 128, hash = 203640] `__vc_attributes::helper_attributes::usageAttribute`
383365 ALL-NEXT: unique name: `.?AUusageAttribute@helper_attributes@__vc_attributes@@`
384366 ALL-NEXT: vtable: , base list: , field list:
385367 ALL-NEXT: options: forward ref | has unique name
396378 ALL-NEXT: - LF_ONEMETHOD [name = `usageAttribute`]
397379 ALL-NEXT: type = 0x1040, vftable offset = -1, attrs = public
398380 ALL-NEXT: - LF_MEMBER [name = `value`, Type = 0x0075 (unsigned), offset = 0, attrs = public]
399 ALL-NEXT: 0x1042 | LF_STRUCTURE [size = 128, hash = 165040]
400 ALL-NEXT: class name: `__vc_attributes::helper_attributes::usageAttribute`
381 ALL-NEXT: 0x1042 | LF_STRUCTURE [size = 128, hash = 165040] `__vc_attributes::helper_attributes::usageAttribute`
401382 ALL-NEXT: unique name: `.?AUusageAttribute@helper_attributes@__vc_attributes@@`
402383 ALL-NEXT: vtable: , base list: , field list: 0x1041
403384 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name
406387 ALL-NEXT: - LF_ENUMERATE [eInteger = 1]
407388 ALL-NEXT: - LF_ENUMERATE [eFloat = 2]
408389 ALL-NEXT: - LF_ENUMERATE [eDouble = 3]
409 ALL-NEXT: 0x1044 | LF_ENUM [size = 148, hash = 142625]
410 ALL-NEXT: name: `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e`
390 ALL-NEXT: 0x1044 | LF_ENUM [size = 148, hash = 142625] `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e`
411391 ALL-NEXT: unique name: `.?AW4type_e@v1_alttypeAttribute@helper_attributes@__vc_attributes@@`
412392 ALL-NEXT: field list: 0x1043, underlying type: 0x0074 (int)
413393 ALL-NEXT: options: has unique name | is nested
414 ALL-NEXT: 0x1045 | LF_STRUCTURE [size = 140, hash = 52534]
415 ALL-NEXT: class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute`
394 ALL-NEXT: 0x1045 | LF_STRUCTURE [size = 140, hash = 52534] `__vc_attributes::helper_attributes::v1_alttypeAttribute`
416395 ALL-NEXT: unique name: `.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@`
417396 ALL-NEXT: vtable: , base list: , field list:
418397 ALL-NEXT: options: forward ref | has unique name
429408 ALL-NEXT: - LF_ONEMETHOD [name = `v1_alttypeAttribute`]
430409 ALL-NEXT: type = 0x1048, vftable offset = -1, attrs = public
431410 ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1044, offset = 0, attrs = public]
432 ALL-NEXT: 0x104A | LF_STRUCTURE [size = 140, hash = 213215]
433 ALL-NEXT: class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute`
411 ALL-NEXT: 0x104A | LF_STRUCTURE [size = 140, hash = 213215] `__vc_attributes::helper_attributes::v1_alttypeAttribute`
434412 ALL-NEXT: unique name: `.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@`
435413 ALL-NEXT: vtable: , base list: , field list: 0x1049
436414 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name
1313 TPI-TYPES-NEXT: 0x1002 | LF_ARGLIST [size = 16]
1414 TPI-TYPES-NEXT: 0x0074 (int): `int`
1515 TPI-TYPES-NEXT: 0x1000: `char**`
16 TPI-TYPES-NEXT: 0x1003 | LF_STRUCTURE [size = 36]
17 TPI-TYPES-NEXT: class name: `FooBar`
16 TPI-TYPES-NEXT: 0x1003 | LF_STRUCTURE [size = 36] `FooBar`
1817 TPI-TYPES-NEXT: unique name: `FooBar`
1918 TPI-TYPES-NEXT: vtable: , base list: , field list: 0x1001
2019 TPI-TYPES-NEXT: options: has unique name
1010 MERGED-NEXT: referent = 0x0075 (unsigned), mode = pointer, opts = None, kind = ptr32
1111 MERGED-NEXT: 0x1001 | LF_POINTER [size = 12]
1212 MERGED-NEXT: referent = 0x0076 (__int64), mode = pointer, opts = None, kind = ptr32
13 MERGED-NEXT: 0x1002 | LF_STRUCTURE [size = 48]
14 MERGED-NEXT: class name: `OnlyInMerge1`
13 MERGED-NEXT: 0x1002 | LF_STRUCTURE [size = 48] `OnlyInMerge1`
1514 MERGED-NEXT: unique name: `OnlyInMerge1`
1615 MERGED-NEXT: vtable: , base list: , field list:
1716 MERGED-NEXT: options: forward ref | has unique name
2827 MERGED-NEXT: 0x1007 | LF_PROCEDURE [size = 16]
2928 MERGED-NEXT: return type = 0x0075 (unsigned), # args = 0, param list = 0x1006
3029 MERGED-NEXT: calling conv = cdecl, options = None
31 MERGED-NEXT: 0x1008 | LF_STRUCTURE [size = 48]
32 MERGED-NEXT: class name: `OnlyInMerge2`
30 MERGED-NEXT: 0x1008 | LF_STRUCTURE [size = 48] `OnlyInMerge2`
3331 MERGED-NEXT: unique name: `OnlyInMerge2`
3432 MERGED-NEXT: vtable: , base list: , field list:
3533 MERGED-NEXT: options: forward ref | has unique name
1616 DEPS-NEXT: ============================================================
1717 DEPS-NEXT: Showing 1 records and their dependents (4 records total)
1818 DEPS-NEXT: 0x100E | LF_ARGLIST [size = 8]
19 DEPS-NEXT: 0x1017 | LF_CLASS [size = 60]
20 DEPS-NEXT: class name: `MembersTest::A`
19 DEPS-NEXT: 0x1017 | LF_CLASS [size = 60] `MembersTest::A`
2120 DEPS-NEXT: unique name: `.?AVA@MembersTest@@`
2221 DEPS-NEXT: vtable: , base list: , field list:
2322 DEPS-NEXT: options: forward ref | has unique name
298298
299299 Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
300300 ClassRecord &Class) {
301 P.formatLine("class name: `{0}`", Class.Name);
301 P.format(" `{0}`", Class.Name);
302302 if (Class.hasUniqueName())
303303 P.formatLine("unique name: `{0}`", Class.UniqueName);
304304 P.formatLine("vtable: {0}, base list: {1}, field list: {2}",
310310
311311 Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
312312 UnionRecord &Union) {
313 P.formatLine("class name: `{0}`", Union.Name);
313 P.format(" `{0}`", Union.Name);
314314 if (Union.hasUniqueName())
315315 P.formatLine("unique name: `{0}`", Union.UniqueName);
316316 P.formatLine("field list: {0}", Union.FieldList);
320320 }
321321
322322 Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, EnumRecord &Enum) {
323 P.formatLine("name: `{0}`", Enum.Name);
323 P.format(" `{0}`", Enum.Name);
324324 if (Enum.hasUniqueName())
325325 P.formatLine("unique name: `{0}`", Enum.UniqueName);
326326 P.formatLine("field list: {0}, underlying type: {1}", Enum.FieldList,
398398 cl::cat(TypeOptions), cl::sub(DumpSubcommand));
399399
400400 cl::list DumpTypeIndex(
401 "type-index", cl::ZeroOrMore,
401 "type-index", cl::ZeroOrMore, cl::CommaSeparated,
402402 cl::desc("only dump types with the specified hexadecimal type index"),
403403 cl::cat(TypeOptions), cl::sub(DumpSubcommand));
404404
414414 cl::desc("dump id hashes and index offsets"),
415415 cl::cat(TypeOptions), cl::sub(DumpSubcommand));
416416 cl::list DumpIdIndex(
417 "id-index", cl::ZeroOrMore,
417 "id-index", cl::ZeroOrMore, cl::CommaSeparated,
418418 cl::desc("only dump ids with the specified hexadecimal type index"),
419419 cl::cat(TypeOptions), cl::sub(DumpSubcommand));
420420