llvm.org GIT mirror llvm / 903e31c
[PDB] Make the pretty dumper output modified types. Currently if we got something like `const Foo` we'd ignore it and just rely on printing the unmodified `Foo` later on. However, for testing the native reading code we really would like to be able to see these so that we can verify that the native reader can actually handle them. Instead of printing out the full type though, just print out the header. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342295 91177308-0d34-0410-b5e6-96231b3b80d8 Zachary Turner 1 year, 1 day ago
9 changed file(s) with 309 addition(s) and 245 deletion(s). Raw diff Collapse all Expand all
3333 FORWARD_SYMBOL_METHOD(hasNestedTypes)
3434 FORWARD_SYMBOL_METHOD(getLength)
3535 FORWARD_SYMBOL_ID_METHOD(getLexicalParent)
36 FORWARD_SYMBOL_ID_METHOD(getUnmodifiedType)
3637 FORWARD_SYMBOL_METHOD(getName)
3738 FORWARD_SYMBOL_METHOD(getSrcLineOnTypeDefn)
3839 FORWARD_SYMBOL_METHOD(isNested)
33 void *__purecall = 0;
44
55 void __cdecl operator delete(void *,unsigned int) {}
6 void __cdecl operator delete(void *,unsigned __int64) {}
67
78 struct FooStruct { }; // LF_STRUCTURE
89
910 class FooClass { // LF_CLASS
11 public:
1012 // LF_FIELDLIST
1113 enum NestedEnum { // LF_ENUM
1214 // LF_NESTTYPE
4951
5052 int SomeArray[7] = {1, 2, 3, 4, 5, 6, 7}; // LF_ARRAY
5153
54 template
55 void Reference(T &t) { }
56
57 const volatile FooStruct FS; // LF_MODIFIER with struct
58 const volatile FooClass FC; // LF_MODIFIER with class
59 const volatile TheUnion TU; // LF_MODIFIER with union
60 const volatile FooClass::NestedEnum FCNE = FooClass::A; // LF_MODIFIER with enum
61
62
5263 int main(int argc, char **argv) { // LF_PROCEDURE
5364 const int X = 7; // LF_MODIFIER
5465
5869 VInherit VInheritInstance;
5970 IVInherit IVInheritInstance;
6071 TheUnion UnionInstance;
72 Reference(FS); // LF_MODIFIER with struct
73 Reference(FC); // LF_MODIFIER with class
74 Reference(TU); // LF_MODIFIER with union
75 Reference(FCNE); // LF_MODIFIER with enum
6176 return SomeArray[argc];
6277 }
221221 VBPtrType: 0x1001 # const int *
222222 VBPtrOffset: 0
223223 VTableIndex: 1
224 # class Inherit : public FooClass {}; [Index: 0x1014]
224 # struct Inherit : public FooClass {}; [Index: 0x1014]
225225 - Kind: LF_STRUCTURE
226226 Class:
227227 MemberCount: 1
241241 DerivationList: 0x1012
242242 VTableShape: 0
243243 Size: 4
244 # const volatile enum FooClass::Enum : uint32_t { [Index: 0x1016]
245 - Kind: LF_MODIFIER
246 Modifier:
247 ModifiedType: 0x100D
248 Modifiers: [ Const, Volatile ]
249 # const volatile struct Inherit : public FooClass {} { [Index: 0x1017]
250 - Kind: LF_MODIFIER
251 Modifier:
252 ModifiedType: 0x1014
253 Modifiers: [ Const, Volatile ]
254 # const volatile class FooClass { [Index: 0x1018]
255 - Kind: LF_MODIFIER
256 Modifier:
257 ModifiedType: 0x100F
258 Modifiers: [ Const, Volatile ]
259 # const volatile interface FooInterface { [Index: 0x1019]
260 - Kind: LF_MODIFIER
261 Modifier:
262 ModifiedType: 0x1011
263 Modifiers: [ Const, Volatile ]
244264
245265 # // Member type records. These are generally not length prefixed, and appear
246266 # // inside of a field list record.
1111 DUMP-NEXT: symTag: 12
1212 DUMP-NEXT: baseType: 6
1313 DUMP-NEXT: lexicalParentId: 0
14 DUMP-NEXT: name: FooClass::NestedEnum
15 DUMP-NEXT: typeId: 3
16 DUMP-NEXT: length: 4
17 DUMP-NEXT: constructor: 0
18 DUMP-NEXT: constType: 0
19 DUMP-NEXT: hasAssignmentOperator: 0
20 DUMP-NEXT: hasCastOperator: 0
21 DUMP-NEXT: hasNestedTypes: 0
22 DUMP-NEXT: overloadedOperator: 0
23 DUMP-NEXT: isInterfaceUdt: 0
24 DUMP-NEXT: intrinsic: 0
25 DUMP-NEXT: nested: 1
26 DUMP-NEXT: packed: 0
27 DUMP-NEXT: isRefUdt: 0
28 DUMP-NEXT: scoped: 0
29 DUMP-NEXT: unalignedType: 0
30 DUMP-NEXT: isValueUdt: 0
31 DUMP-NEXT: volatileType: 0
32 DUMP-NEXT: }
33 DUMP-NEXT: {
34 DUMP-NEXT: symIndexId: 4
35 DUMP-NEXT: symTag: 12
36 DUMP-NEXT: baseType: 6
37 DUMP-NEXT: lexicalParentId: 0
1438 DUMP-NEXT: name: __vc_attributes::event_sourceAttribute::type_e
1539 DUMP-NEXT: typeId: 3
1640 DUMP-NEXT: length: 4
3155 DUMP-NEXT: volatileType: 0
3256 DUMP-NEXT: }
3357 DUMP-NEXT: {
34 DUMP-NEXT: symIndexId: 4
58 DUMP-NEXT: symIndexId: 5
3559 DUMP-NEXT: symTag: 12
3660 DUMP-NEXT: baseType: 6
3761 DUMP-NEXT: lexicalParentId: 0
5579 DUMP-NEXT: volatileType: 0
5680 DUMP-NEXT: }
5781 DUMP-NEXT: {
58 DUMP-NEXT: symIndexId: 5
82 DUMP-NEXT: symIndexId: 6
5983 DUMP-NEXT: symTag: 12
6084 DUMP-NEXT: baseType: 6
6185 DUMP-NEXT: lexicalParentId: 0
79103 DUMP-NEXT: volatileType: 0
80104 DUMP-NEXT: }
81105 DUMP-NEXT: {
82 DUMP-NEXT: symIndexId: 6
106 DUMP-NEXT: symIndexId: 7
83107 DUMP-NEXT: symTag: 12
84108 DUMP-NEXT: baseType: 6
85109 DUMP-NEXT: lexicalParentId: 0
103127 DUMP-NEXT: volatileType: 0
104128 DUMP-NEXT: }
105129 DUMP-NEXT: {
106 DUMP-NEXT: symIndexId: 7
130 DUMP-NEXT: symIndexId: 8
107131 DUMP-NEXT: symTag: 12
108132 DUMP-NEXT: baseType: 6
109133 DUMP-NEXT: lexicalParentId: 0
127151 DUMP-NEXT: volatileType: 0
128152 DUMP-NEXT: }
129153 DUMP-NEXT: {
130 DUMP-NEXT: symIndexId: 8
154 DUMP-NEXT: symIndexId: 9
131155 DUMP-NEXT: symTag: 12
132156 DUMP-NEXT: baseType: 6
133157 DUMP-NEXT: lexicalParentId: 0
151175 DUMP-NEXT: volatileType: 0
152176 DUMP-NEXT: }
153177 DUMP-NEXT: {
154 DUMP-NEXT: symIndexId: 9
178 DUMP-NEXT: symIndexId: 10
155179 DUMP-NEXT: symTag: 12
156180 DUMP-NEXT: baseType: 6
157181 DUMP-NEXT: lexicalParentId: 0
175199 DUMP-NEXT: volatileType: 0
176200 DUMP-NEXT: }
177201 DUMP-NEXT: {
178 DUMP-NEXT: symIndexId: 10
202 DUMP-NEXT: symIndexId: 11
179203 DUMP-NEXT: symTag: 12
180204 DUMP-NEXT: baseType: 6
181205 DUMP-NEXT: lexicalParentId: 0
198222 DUMP-NEXT: isValueUdt: 0
199223 DUMP-NEXT: volatileType: 0
200224 DUMP-NEXT: }
201 DUMP-NEXT: {
202 DUMP-NEXT: symIndexId: 11
203 DUMP-NEXT: symTag: 12
204 DUMP-NEXT: baseType: 6
205 DUMP-NEXT: lexicalParentId: 0
206 DUMP-NEXT: name: FooClass::NestedEnum
207 DUMP-NEXT: typeId: 3
208 DUMP-NEXT: length: 4
209 DUMP-NEXT: constructor: 0
210 DUMP-NEXT: constType: 0
211 DUMP-NEXT: hasAssignmentOperator: 0
212 DUMP-NEXT: hasCastOperator: 0
213 DUMP-NEXT: hasNestedTypes: 0
214 DUMP-NEXT: overloadedOperator: 0
215 DUMP-NEXT: isInterfaceUdt: 0
216 DUMP-NEXT: intrinsic: 0
217 DUMP-NEXT: nested: 1
218 DUMP-NEXT: packed: 0
219 DUMP-NEXT: isRefUdt: 0
220 DUMP-NEXT: scoped: 0
221 DUMP-NEXT: unalignedType: 0
222 DUMP-NEXT: isValueUdt: 0
223 DUMP-NEXT: volatileType: 0
224 DUMP-NEXT: }
77 hasn't changed.
88
99
10 RUN: llvm-pdbutil dump -type-index=0x1018,0x102A,0x103B,0x1093,0x1095,0x1096,0x1098 \
10 RUN: llvm-pdbutil dump -type-index=0x101A,0x102C,0x103D,0x104D,0x1098,0x10AA,0x10AC \
1111 RUN: -dependents %p/Inputs/every-type.pdb | FileCheck --check-prefix=TYPES %s
1212
1313 RUN: llvm-pdbutil pdb2yaml -tpi-stream -ipi-stream %p/Inputs/every-type.pdb > %t.pdb.yaml
1414 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 \
15 RUN: llvm-pdbutil dump -type-index=0x101A,0x102C,0x103D,0x104D,0x1098,0x10AA,0x10AC \
1616 RUN: -dependents %t.yaml.pdb | FileCheck --check-prefix=TYPES %s
1717
1818 TYPES: Types (TPI Stream)
1919 TYPES-NEXT: ============================================================
20 TYPES-NEXT: Showing 7 records and their dependents (73 records total)
21 TYPES-NEXT: 0x1005 | LF_MODIFIER [size = 12]
20 TYPES-NEXT: Showing 7 records and their dependents (72 records total)
21 TYPES-NEXT: 0x1007 | LF_MODIFIER [size = 12]
2222 TYPES-NEXT: referent = 0x0074 (int), modifiers = const
23 TYPES-NEXT: 0x1006 | LF_CLASS [size = 48] `FooClass`
23 TYPES-NEXT: 0x1008 | LF_CLASS [size = 48] `FooClass`
2424 TYPES-NEXT: unique name: `.?AVFooClass@@`
2525 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`
26 TYPES-NEXT: options: forward ref | has unique name, sizeof 0
27 TYPES-NEXT: 0x1009 | LF_VTSHAPE [size = 8]
28 TYPES-NEXT: 0x100A | LF_POINTER [size = 12]
29 TYPES-NEXT: referent = 0x1009, mode = pointer, opts = None, kind = ptr64
30 TYPES-NEXT: 0x100B | LF_CLASS [size = 44] `Inherit`
3131 TYPES-NEXT: unique name: `.?AVInherit@@`
3232 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]
33 TYPES-NEXT: options: forward ref | has unique name, sizeof 0
34 TYPES-NEXT: 0x100C | LF_POINTER [size = 12]
35 TYPES-NEXT: referent = 0x100B, mode = pointer, opts = const, kind = ptr64
36 TYPES-NEXT: 0x100D | LF_ARGLIST [size = 8]
37 TYPES-NEXT: 0x100E | LF_MFUNCTION [size = 28]
38 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D
39 TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0
40 TYPES-NEXT: calling conv = cdecl, options = None
41 TYPES-NEXT: 0x100F | LF_MODIFIER [size = 12]
42 TYPES-NEXT: referent = 0x100B, modifiers = const
43 TYPES-NEXT: 0x1010 | LF_POINTER [size = 12]
44 TYPES-NEXT: referent = 0x100F, mode = ref, opts = None, kind = ptr64
45 TYPES-NEXT: 0x1011 | LF_ARGLIST [size = 12]
46 TYPES-NEXT: 0x1010: `const Inherit&`
47 TYPES-NEXT: 0x1012 | LF_MFUNCTION [size = 28]
48 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1011
49 TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0
50 TYPES-NEXT: calling conv = cdecl, options = constructor
51 TYPES-NEXT: 0x1013 | LF_MFUNCTION [size = 28]
52 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D
53 TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0
54 TYPES-NEXT: calling conv = cdecl, options = constructor
55 TYPES-NEXT: 0x1014 | LF_METHODLIST [size = 20]
56 TYPES-NEXT: - Method [type = 0x1012, vftable offset = -1, attrs = public compiler-generated]
57 TYPES-NEXT: - Method [type = 0x1013, vftable offset = -1, attrs = public compiler-generated]
58 TYPES-NEXT: 0x1015 | LF_POINTER [size = 12]
59 TYPES-NEXT: referent = 0x100B, mode = ref, opts = None, kind = ptr64
60 TYPES-NEXT: 0x1016 | LF_MFUNCTION [size = 28]
61 TYPES-NEXT: return type = 0x1015, # args = 1, param list = 0x1011
62 TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0
63 TYPES-NEXT: calling conv = cdecl, options = None
64 TYPES-NEXT: 0x1017 | LF_ARGLIST [size = 12]
6565 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]
66 TYPES-NEXT: 0x1018 | LF_MFUNCTION [size = 28]
67 TYPES-NEXT: return type = 0x0603 (void*), # args = 1, param list = 0x1017
68 TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0
69 TYPES-NEXT: calling conv = cdecl, options = None
70 TYPES-NEXT: 0x1019 | LF_FIELDLIST [size = 152]
7171 TYPES-NEXT: - LF_BCLASS
72 TYPES-NEXT: type = 0x1006, offset = 4, attrs = public
73 TYPES-NEXT: - LF_VFUNCTAB type = 0x1008
72 TYPES-NEXT: type = 0x1008, offset = 8, attrs = public
73 TYPES-NEXT: - LF_VFUNCTAB type = 0x100A
7474 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]
75 TYPES-NEXT: type = 0x100E, vftable offset = 0, attrs = public intro virtual
76 TYPES-NEXT: - LF_METHOD [name = `Inherit`, # overloads = 2, overload list = 0x1014]
7777 TYPES-NEXT: - LF_ONEMETHOD [name = `operator=`]
78 TYPES-NEXT: type = 0x1014, vftable offset = -1, attrs = public compiler-generated
78 TYPES-NEXT: type = 0x1016, vftable offset = -1, attrs = public compiler-generated
7979 TYPES-NEXT: - LF_ONEMETHOD [name = `__local_vftable_ctor_closure`]
80 TYPES-NEXT: type = 0x100C, vftable offset = -1, attrs = public compiler-generated
80 TYPES-NEXT: type = 0x100E, vftable offset = -1, attrs = public compiler-generated
8181 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`
82 TYPES-NEXT: type = 0x1018, vftable offset = 0, attrs = public intro virtual compiler-generated
83 TYPES-NEXT: 0x101A | LF_CLASS [size = 44] `Inherit`
8484 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`
85 TYPES-NEXT: vtable: 0x1009, base list: , field list: 0x1019
86 TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=, sizeof 16
87 TYPES-NEXT: 0x101B | LF_POINTER [size = 12]
88 TYPES-NEXT: referent = 0x1007, mode = pointer, opts = None, kind = ptr64
89 TYPES-NEXT: 0x101C | LF_CLASS [size = 48] `VInherit`
9090 TYPES-NEXT: unique name: `.?AVVInherit@@`
9191 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]
92 TYPES-NEXT: options: forward ref | has unique name, sizeof 0
93 TYPES-NEXT: 0x101D | LF_POINTER [size = 12]
94 TYPES-NEXT: referent = 0x101C, mode = pointer, opts = const, kind = ptr64
95 TYPES-NEXT: 0x101E | LF_POINTER [size = 12]
96 TYPES-NEXT: referent = 0x101C, mode = rvalue ref, opts = None, kind = ptr64
97 TYPES-NEXT: 0x101F | LF_ARGLIST [size = 12]
98 TYPES-NEXT: 0x101E: `VInherit&&`
99 TYPES-NEXT: 0x1020 | LF_MFUNCTION [size = 28]
100 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x101F
101 TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0
102 TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor
103 TYPES-NEXT: 0x1021 | LF_MODIFIER [size = 12]
104 TYPES-NEXT: referent = 0x101C, modifiers = const
105 TYPES-NEXT: 0x1022 | LF_POINTER [size = 12]
106 TYPES-NEXT: referent = 0x1021, mode = ref, opts = None, kind = ptr64
107 TYPES-NEXT: 0x1023 | LF_ARGLIST [size = 12]
108 TYPES-NEXT: 0x1022: `const VInherit&`
109 TYPES-NEXT: 0x1024 | LF_MFUNCTION [size = 28]
110 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1023
111 TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0
112 TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor
113 TYPES-NEXT: 0x1025 | LF_MFUNCTION [size = 28]
114 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D
115 TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0
116 TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor
117 TYPES-NEXT: 0x1026 | LF_METHODLIST [size = 28]
118 TYPES-NEXT: - Method [type = 0x1020, vftable offset = -1, attrs = public compiler-generated]
119 TYPES-NEXT: - Method [type = 0x1024, vftable offset = -1, attrs = public compiler-generated]
120 TYPES-NEXT: - Method [type = 0x1025, vftable offset = -1, attrs = public compiler-generated]
121 TYPES-NEXT: 0x1027 | LF_POINTER [size = 12]
122 TYPES-NEXT: referent = 0x101C, mode = ref, opts = None, kind = ptr64
123 TYPES-NEXT: 0x1028 | LF_MFUNCTION [size = 28]
124 TYPES-NEXT: return type = 0x1027, # args = 1, param list = 0x101F
125 TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0
126 TYPES-NEXT: calling conv = cdecl, options = None
127 TYPES-NEXT: 0x1029 | LF_MFUNCTION [size = 28]
128 TYPES-NEXT: return type = 0x1027, # args = 1, param list = 0x1023
129 TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0
130 TYPES-NEXT: calling conv = cdecl, options = None
131 TYPES-NEXT: 0x102A | LF_METHODLIST [size = 20]
132 TYPES-NEXT: - Method [type = 0x1028, vftable offset = -1, attrs = public compiler-generated]
133 TYPES-NEXT: - Method [type = 0x1029, vftable offset = -1, attrs = public compiler-generated]
134 TYPES-NEXT: 0x102B | LF_FIELDLIST [size = 60]
135135 TYPES-NEXT: - LF_VBCLASS
136 TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1
136 TYPES-NEXT: base = 0x1008, vbptr = 0x101B, vbptr offset = 0, vtable index = 1
137137 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`
138 TYPES-NEXT: - LF_METHOD [name = `VInherit`, # overloads = 3, overload list = 0x1026]
139 TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x102A]
140 TYPES-NEXT: 0x102C | LF_CLASS [size = 48] `VInherit`
141141 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`
142 TYPES-NEXT: vtable: , base list: , field list: 0x102B
143 TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=, sizeof 16
144 TYPES-NEXT: 0x102D | LF_CLASS [size = 48] `IVInherit`
145145 TYPES-NEXT: unique name: `.?AVIVInherit@@`
146146 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]
147 TYPES-NEXT: options: forward ref | has unique name, sizeof 0
148 TYPES-NEXT: 0x102E | LF_POINTER [size = 12]
149 TYPES-NEXT: referent = 0x102D, mode = pointer, opts = const, kind = ptr64
150 TYPES-NEXT: 0x102F | LF_POINTER [size = 12]
151 TYPES-NEXT: referent = 0x102D, mode = rvalue ref, opts = None, kind = ptr64
152 TYPES-NEXT: 0x1030 | LF_ARGLIST [size = 12]
153 TYPES-NEXT: 0x102F: `IVInherit&&`
154 TYPES-NEXT: 0x1031 | LF_MFUNCTION [size = 28]
155 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1030
156 TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0
157 TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor
158 TYPES-NEXT: 0x1032 | LF_MODIFIER [size = 12]
159 TYPES-NEXT: referent = 0x102D, modifiers = const
160 TYPES-NEXT: 0x1033 | LF_POINTER [size = 12]
161 TYPES-NEXT: referent = 0x1032, mode = ref, opts = None, kind = ptr64
162 TYPES-NEXT: 0x1034 | LF_ARGLIST [size = 12]
163 TYPES-NEXT: 0x1033: `const IVInherit&`
164 TYPES-NEXT: 0x1035 | LF_MFUNCTION [size = 28]
165 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1034
166 TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0
167 TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor
168 TYPES-NEXT: 0x1036 | LF_MFUNCTION [size = 28]
169 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D
170 TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0
171 TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor
172 TYPES-NEXT: 0x1037 | LF_METHODLIST [size = 28]
173 TYPES-NEXT: - Method [type = 0x1031, vftable offset = -1, attrs = public compiler-generated]
174 TYPES-NEXT: - Method [type = 0x1035, vftable offset = -1, attrs = public compiler-generated]
175 TYPES-NEXT: - Method [type = 0x1036, vftable offset = -1, attrs = public compiler-generated]
176 TYPES-NEXT: 0x1038 | LF_POINTER [size = 12]
177 TYPES-NEXT: referent = 0x102D, mode = ref, opts = None, kind = ptr64
178 TYPES-NEXT: 0x1039 | LF_MFUNCTION [size = 28]
179 TYPES-NEXT: return type = 0x1038, # args = 1, param list = 0x1030
180 TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0
181 TYPES-NEXT: calling conv = cdecl, options = None
182 TYPES-NEXT: 0x103A | LF_MFUNCTION [size = 28]
183 TYPES-NEXT: return type = 0x1038, # args = 1, param list = 0x1034
184 TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0
185 TYPES-NEXT: calling conv = cdecl, options = None
186 TYPES-NEXT: 0x103B | LF_METHODLIST [size = 20]
187 TYPES-NEXT: - Method [type = 0x1039, vftable offset = -1, attrs = public compiler-generated]
188 TYPES-NEXT: - Method [type = 0x103A, vftable offset = -1, attrs = public compiler-generated]
189 TYPES-NEXT: 0x103C | LF_FIELDLIST [size = 72]
190190 TYPES-NEXT: - LF_BCLASS
191 TYPES-NEXT: type = 0x101A, offset = 0, attrs = public
191 TYPES-NEXT: type = 0x101C, offset = 0, attrs = public
192192 TYPES-NEXT: - LF_IVBCLASS
193 TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1
193 TYPES-NEXT: base = 0x1008, vbptr = 0x101B, vbptr offset = 0, vtable index = 1
194194 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`
195 TYPES-NEXT: - LF_METHOD [name = `IVInherit`, # overloads = 3, overload list = 0x1037]
196 TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x103B]
197 TYPES-NEXT: 0x103D | LF_CLASS [size = 48] `IVInherit`
198198 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]
199 TYPES-NEXT: vtable: , base list: , field list: 0x103C
200 TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=, sizeof 16
201 TYPES-NEXT: 0x1041 | LF_FIELDLIST [size = 28]
202202 TYPES-NEXT: - LF_ENUMERATE [A = 0]
203203 TYPES-NEXT: - LF_ENUMERATE [B = 1]
204204 TYPES-NEXT: - LF_ENUMERATE [C = 2]
205 TYPES-NEXT: 0x1088 | LF_ENUM [size = 64] `FooClass::NestedEnum`
205 TYPES-NEXT: 0x1042 | LF_ENUM [size = 64] `FooClass::NestedEnum`
206206 TYPES-NEXT: unique name: `.?AW4NestedEnum@FooClass@@`
207 TYPES-NEXT: field list: 0x1087, underlying type: 0x0074 (int)
207 TYPES-NEXT: field list: 0x1041, underlying type: 0x0074 (int)
208208 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]
209 TYPES-NEXT: 0x1043 | LF_POINTER [size = 12]
210 TYPES-NEXT: referent = 0x1008, mode = pointer, opts = const, kind = ptr64
211 TYPES-NEXT: 0x1044 | LF_MFUNCTION [size = 28]
212 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D
213 TYPES-NEXT: class type = 0x1008, this type = 0x1043, this adjust = 0
214 TYPES-NEXT: calling conv = cdecl, options = None
215 TYPES-NEXT: 0x1045 | LF_ARGLIST [size = 16]
216216 TYPES-NEXT: 0x0074 (int): `int`
217217 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]
218 TYPES-NEXT: 0x1046 | LF_MFUNCTION [size = 28]
219 TYPES-NEXT: return type = 0x0003 (void), # args = 2, param list = 0x1045
220 TYPES-NEXT: class type = 0x1008, this type = 0x1043, this adjust = 0
221 TYPES-NEXT: calling conv = cdecl, options = None
222 TYPES-NEXT: 0x1047 | LF_ARGLIST [size = 12]
223223 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]
224 TYPES-NEXT: 0x1048 | LF_MFUNCTION [size = 28]
225 TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1047
226 TYPES-NEXT: class type = 0x1008, this type = 0x1043, this adjust = 0
227 TYPES-NEXT: calling conv = cdecl, options = None
228 TYPES-NEXT: 0x1049 | LF_METHODLIST [size = 20]
229 TYPES-NEXT: - Method [type = 0x1046, vftable offset = -1, attrs = public]
230 TYPES-NEXT: - Method [type = 0x1048, vftable offset = -1, attrs = public]
231 TYPES-NEXT: 0x104A | LF_BITFIELD [size = 12]
232232 TYPES-NEXT: type = 0x0074 (int), bit offset = 0, # bits = 4
233 TYPES-NEXT: 0x1091 | LF_BITFIELD [size = 12]
233 TYPES-NEXT: 0x104B | LF_BITFIELD [size = 12]
234234 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]
235 TYPES-NEXT: 0x104C | LF_FIELDLIST [size = 164]
236 TYPES-NEXT: - LF_NESTTYPE [name = `NestedEnum`, parent = 0x1042]
237237 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`
238 TYPES-NEXT: type = 0x1044, vftable offset = -1, attrs = public
239 TYPES-NEXT: - LF_METHOD [name = `OverloadedMethod`, # overloads = 2, overload list = 0x1049]
240 TYPES-NEXT: - LF_MEMBER [name = `HiNibble`, Type = 0x104A, offset = 0, attrs = public]
241 TYPES-NEXT: - LF_MEMBER [name = `LoNibble`, Type = 0x104B, offset = 0, attrs = public]
242 TYPES-NEXT: - LF_MEMBER [name = `EnumVariable`, Type = 0x1042, offset = 4, attrs = public]
243 TYPES-NEXT: - LF_STMEMBER [name = `StaticMember`, type = 0x0603 (void*), attrs = public]
244 TYPES-NEXT: 0x104D | LF_CLASS [size = 48] `FooClass`
245245 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`
246 TYPES-NEXT: vtable: , base list: , field list: 0x104C
247 TYPES-NEXT: options: contains nested class | has unique name, sizeof 8
248 TYPES-NEXT: 0x1098 | LF_UNION [size = 40] `TheUnion`
251249 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
250 TYPES-NEXT: field list:
251 TYPES-NEXT: options: forward ref | has unique name, sizeof 0
252 TYPES-NEXT: 0x10AA | LF_PROCEDURE [size = 16]
253 TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D
254 TYPES-NEXT: calling conv = cdecl, options = None
255 TYPES-NEXT: 0x10AB | LF_POINTER [size = 12]
256 TYPES-NEXT: referent = 0x10AA, mode = pointer, opts = const, kind = ptr64
257 TYPES-NEXT: 0x10AC | LF_ARRAY [size = 16]
258 TYPES-NEXT: size: 8, index type: 0x0023 (unsigned __int64), element type: 0x10AB
4949
5050 uint32_t Size = Layout.getSize();
5151 const PDBSymbolTypeUDT &Class = Layout.getClass();
52
53 if (Layout.getClass().isConstType())
54 WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
55 if (Layout.getClass().isVolatileType())
56 WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
57 if (Layout.getClass().isUnalignedType())
58 WithColor(Printer, PDB_ColorItem::Keyword).get() << "unaligned ";
5259
5360 WithColor(Printer, PDB_ColorItem::Keyword).get() << Class.getUdtKind() << " ";
5461 WithColor(Printer, PDB_ColorItem::Type).get() << Class.getName();
2222 EnumDumper::EnumDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {}
2323
2424 void EnumDumper::start(const PDBSymbolTypeEnum &Symbol) {
25 if (Symbol.getUnmodifiedTypeId() != 0) {
26 if (Symbol.isConstType())
27 WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
28 if (Symbol.isVolatileType())
29 WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
30 if (Symbol.isUnalignedType())
31 WithColor(Printer, PDB_ColorItem::Keyword).get() << "unaligned ";
32 WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
33 WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
34 return;
35 }
36
2537 WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
2638 WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
2739 if (!opts::pretty::NoEnumDefs) {
195195 dumpClassLayout(*Class);
196196 } else {
197197 while (auto Class = Classes->getNext()) {
198 if (Class->getUnmodifiedTypeId() != 0)
199 continue;
200
201198 if (Printer.IsTypeExcluded(Class->getName(), Class->getLength()))
202199 continue;
200
201 if (Class->getUnmodifiedTypeId() != 0) {
202 Printer.NewLine();
203 if (Class->isConstType())
204 WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
205 if (Class->isVolatileType())
206 WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
207 if (Class->isUnalignedType())
208 WithColor(Printer, PDB_ColorItem::Keyword).get() << "unaligned ";
209 WithColor(Printer, PDB_ColorItem::Keyword).get()
210 << Class->getUdtKind() << " ";
211 WithColor(Printer, PDB_ColorItem::Type).get() << Class->getName();
212 continue;
213 }
203214
204215 auto Layout = llvm::make_unique(std::move(Class));
205216 if (Layout->deepPaddingSize() < opts::pretty::PaddingThreshold)
243254 assert(opts::pretty::Classes);
244255
245256 if (opts::pretty::ClassFormat == opts::pretty::ClassDefinitionFormat::None) {
246 Printer.NewLine();
247 WithColor(Printer, PDB_ColorItem::Keyword).get() << "class ";
248 WithColor(Printer, PDB_ColorItem::Identifier).get() << Class.getName();
257 WithColor(Printer, PDB_ColorItem::Keyword).get()
258 << Class.getClass().getUdtKind() << " ";
259 WithColor(Printer, PDB_ColorItem::Type).get() << Class.getName();
249260 } else {
250261 ClassDefinitionDumper Dumper(Printer);
251262 Dumper.start(Class);