Use "isa" since the variable isn't used.
[llvm-complete.git] / test / DebugInfo / COFF / types-data-members.ll
bloba63dce2907670d00c00c8288599cfa5a1465b4aa
1 ; RUN: llc < %s -filetype=obj | llvm-readobj - --codeview | FileCheck %s
2 ; RUN: llc < %s | llvm-mc -filetype=obj --triple=x86_64-windows | llvm-readobj - --codeview | FileCheck %s
3 ; RUN: llc < %s | FileCheck %s --check-prefix=ASM
5 ; C++ source to regenerate:
6 ; $ cat t.cpp
7 ; struct Struct {
8 ;   int s1;
9 ;   int s2;
10 ;   int s3;
11 ;   static const int sdm = 3;
12 ; };
13 ; union Union {
14 ;   int a;
15 ;   float b;
16 ; };
17 ; class Class {
18 ; public:
19 ;   int pub;
20 ;   struct Nested;
21 ; private:
22 ;   int priv;
23 ; protected:
24 ;   int prot;
25 ; };
26 ; struct DerivedClass : Struct, virtual Class {
27 ;   int d;
28 ; };
29 ; struct Class::Nested {
30 ;   int n;
31 ; };
32 ; void UseTypes() {
33 ;   Struct s;
34 ;   Union u;
35 ;   Class c;
36 ;   DerivedClass dc;
37 ;   Class::Nested n;
38 ; }
39 ; $ clang t.cpp -S -emit-llvm -g -gcodeview -o t.ll
41 ; CHECK: CodeViewTypes [
42 ; CHECK:   Section: .debug$T (8)
43 ; CHECK:   Magic: 0x4
44 ; CHECK:   ArgList (0x1000) {
45 ; CHECK:     TypeLeafKind: LF_ARGLIST (0x1201)
46 ; CHECK:     NumArgs: 0
47 ; CHECK:     Arguments [
48 ; CHECK:     ]
49 ; CHECK:   }
50 ; CHECK:   Procedure (0x1001) {
51 ; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)
52 ; CHECK:     ReturnType: void (0x3)
53 ; CHECK:     CallingConvention: NearC (0x0)
54 ; CHECK:     FunctionOptions [ (0x0)
55 ; CHECK:     ]
56 ; CHECK:     NumParameters: 0
57 ; CHECK:     ArgListType: () (0x1000)
58 ; CHECK:   }
59 ; CHECK:   FuncId (0x1002) {
60 ; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)
61 ; CHECK:     ParentScope: 0x0
62 ; CHECK:     FunctionType: void () (0x1001)
63 ; CHECK:     Name: UseTypes
64 ; CHECK:   }
65 ; CHECK:   Struct (0x1003) {
66 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
67 ; CHECK:     MemberCount: 0
68 ; CHECK:     Properties [ (0x280)
69 ; CHECK:       ForwardReference (0x80)
70 ; CHECK:       HasUniqueName (0x200)
71 ; CHECK:     ]
72 ; CHECK:     FieldList: 0x0
73 ; CHECK:     DerivedFrom: 0x0
74 ; CHECK:     VShape: 0x0
75 ; CHECK:     SizeOf: 0
76 ; CHECK:     Name: Struct
77 ; CHECK:     LinkageName: .?AUStruct@@
78 ; CHECK:   }
79 ; CHECK:   Modifier (0x1004) {
80 ; CHECK:     TypeLeafKind: LF_MODIFIER (0x1001)
81 ; CHECK:     ModifiedType: int (0x74)
82 ; CHECK:     Modifiers [ (0x1)
83 ; CHECK:       Const (0x1)
84 ; CHECK:     ]
85 ; CHECK:   }
86 ; CHECK:   FieldList (0x1005) {
87 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
88 ; CHECK:     DataMember {
89 ; CHECK:       AccessSpecifier: Public (0x3)
90 ; CHECK:       Type: int (0x74)
91 ; CHECK:       FieldOffset: 0x0
92 ; CHECK:       Name: s1
93 ; CHECK:     }
94 ; CHECK:     DataMember {
95 ; CHECK:       AccessSpecifier: Public (0x3)
96 ; CHECK:       Type: int (0x74)
97 ; CHECK:       FieldOffset: 0x4
98 ; CHECK:       Name: s2
99 ; CHECK:     }
100 ; CHECK:     DataMember {
101 ; CHECK:       AccessSpecifier: Public (0x3)
102 ; CHECK:       Type: int (0x74)
103 ; CHECK:       FieldOffset: 0x8
104 ; CHECK:       Name: s3
105 ; CHECK:     }
106 ; CHECK:     StaticDataMember {
107 ; CHECK:       AccessSpecifier: Public (0x3)
108 ; CHECK:       Type: const int (0x1004)
109 ; CHECK:       Name: sdm
110 ; CHECK:     }
111 ; CHECK:   }
112 ; CHECK:   Struct (0x1006) {
113 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
114 ; CHECK:     MemberCount: 4
115 ; CHECK:     Properties [ (0x200)
116 ; CHECK:       HasUniqueName (0x200)
117 ; CHECK:     ]
118 ; CHECK:     FieldList: <field list> (0x1005)
119 ; CHECK:     DerivedFrom: 0x0
120 ; CHECK:     VShape: 0x0
121 ; CHECK:     SizeOf: 12
122 ; CHECK:     Name: Struct
123 ; CHECK:     LinkageName: .?AUStruct@@
124 ; CHECK:   }
125 ; CHECK:   StringId (0x1007) {
126 ; CHECK:     TypeLeafKind: LF_STRING_ID (0x1605)
127 ; CHECK:     Id: 0x0
128 ; CHECK:     StringData: D:\src\llvm\build\t.cpp
129 ; CHECK:   }
130 ; CHECK:   UdtSourceLine (0x1008) {
131 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
132 ; CHECK:     UDT: Struct (0x1006)
133 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
134 ; CHECK:     LineNumber: 1
135 ; CHECK:   }
136 ; CHECK:   Union (0x1009) {
137 ; CHECK:     TypeLeafKind: LF_UNION (0x1506)
138 ; CHECK:     MemberCount: 0
139 ; CHECK:     Properties [ (0x280)
140 ; CHECK:       ForwardReference (0x80)
141 ; CHECK:       HasUniqueName (0x200)
142 ; CHECK:     ]
143 ; CHECK:     FieldList: 0x0
144 ; CHECK:     SizeOf: 0
145 ; CHECK:     Name: Union
146 ; CHECK:     LinkageName: .?ATUnion@@
147 ; CHECK:   }
148 ; CHECK:   FieldList (0x100A) {
149 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
150 ; CHECK:     DataMember {
151 ; CHECK:       AccessSpecifier: Public (0x3)
152 ; CHECK:       Type: int (0x74)
153 ; CHECK:       FieldOffset: 0x0
154 ; CHECK:       Name: a
155 ; CHECK:     }
156 ; CHECK:     DataMember {
157 ; CHECK:       AccessSpecifier: Public (0x3)
158 ; CHECK:       Type: float (0x40)
159 ; CHECK:       FieldOffset: 0x0
160 ; CHECK:       Name: b
161 ; CHECK:     }
162 ; CHECK:   }
163 ; CHECK:   Union (0x100B) {
164 ; CHECK:     TypeLeafKind: LF_UNION (0x1506)
165 ; CHECK:     MemberCount: 2
166 ; CHECK:     Properties [ (0x600)
167 ; CHECK:       HasUniqueName (0x200)
168 ; CHECK:       Sealed (0x400)
169 ; CHECK:     ]
170 ; CHECK:     FieldList: <field list> (0x100A)
171 ; CHECK:     SizeOf: 4
172 ; CHECK:     Name: Union
173 ; CHECK:     LinkageName: .?ATUnion@@
174 ; CHECK:   }
175 ; CHECK:   UdtSourceLine (0x100C) {
176 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
177 ; CHECK:     UDT: Union (0x100B)
178 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
179 ; CHECK:     LineNumber: 7
180 ; CHECK:   }
181 ; CHECK:   Class (0x100D) {
182 ; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
183 ; CHECK:     MemberCount: 0
184 ; CHECK:     Properties [ (0x280)
185 ; CHECK:       ForwardReference (0x80)
186 ; CHECK:       HasUniqueName (0x200)
187 ; CHECK:     ]
188 ; CHECK:     FieldList: 0x0
189 ; CHECK:     DerivedFrom: 0x0
190 ; CHECK:     VShape: 0x0
191 ; CHECK:     SizeOf: 0
192 ; CHECK:     Name: Class
193 ; CHECK:     LinkageName: .?AVClass@@
194 ; CHECK:   }
195 ; CHECK:   FieldList (0x100E) {
196 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
197 ; CHECK:     DataMember {
198 ; CHECK:       AccessSpecifier: Public (0x3)
199 ; CHECK:       Type: int (0x74)
200 ; CHECK:       FieldOffset: 0x0
201 ; CHECK:       Name: pub
202 ; CHECK:     }
203 ; CHECK:     DataMember {
204 ; CHECK:       AccessSpecifier: Private (0x1)
205 ; CHECK:       Type: int (0x74)
206 ; CHECK:       FieldOffset: 0x4
207 ; CHECK:       Name: priv
208 ; CHECK:     }
209 ; CHECK:     DataMember {
210 ; CHECK:       AccessSpecifier: Protected (0x2)
211 ; CHECK:       Type: int (0x74)
212 ; CHECK:       FieldOffset: 0x8
213 ; CHECK:       Name: prot
214 ; CHECK:     }
215 ; CHECK:   }
216 ; CHECK:   Class (0x100F) {
217 ; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
218 ; CHECK:     MemberCount: 3
219 ; CHECK:     Properties [ (0x200)
220 ; CHECK:       HasUniqueName (0x200)
221 ; CHECK:     ]
222 ; CHECK:     FieldList: <field list> (0x100E)
223 ; CHECK:     DerivedFrom: 0x0
224 ; CHECK:     VShape: 0x0
225 ; CHECK:     SizeOf: 12
226 ; CHECK:     Name: Class
227 ; CHECK:     LinkageName: .?AVClass@@
228 ; CHECK:   }
229 ; CHECK:   UdtSourceLine (0x1010) {
230 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
231 ; CHECK:     UDT: Class (0x100F)
232 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
233 ; CHECK:     LineNumber: 11
234 ; CHECK:   }
235 ; CHECK:   Struct (0x1011) {
236 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
237 ; CHECK:     MemberCount: 0
238 ; CHECK:     Properties [ (0x280)
239 ; CHECK:       ForwardReference (0x80)
240 ; CHECK:       HasUniqueName (0x200)
241 ; CHECK:     ]
242 ; CHECK:     FieldList: 0x0
243 ; CHECK:     DerivedFrom: 0x0
244 ; CHECK:     VShape: 0x0
245 ; CHECK:     SizeOf: 0
246 ; CHECK:     Name: DerivedClass
247 ; CHECK:     LinkageName: .?AUDerivedClass@@
248 ; CHECK:   }
249 ; CHECK:   Pointer (0x1012) {
250 ; CHECK:     TypeLeafKind: LF_POINTER (0x1002)
251 ; CHECK:     PointeeType: const int (0x1004)
252 ; CHECK:     PtrType: Near64 (0xC)
253 ; CHECK:     PtrMode: Pointer (0x0)
254 ; CHECK:     IsFlat: 0
255 ; CHECK:     IsConst: 0
256 ; CHECK:     IsVolatile: 0
257 ; CHECK:     IsUnaligned: 0
258 ; CHECK:     SizeOf: 8
259 ; CHECK:   }
260 ; CHECK:   VFTableShape (0x1013) {
261 ; CHECK:     TypeLeafKind: LF_VTSHAPE (0xA)
262 ; CHECK:     VFEntryCount: 1
263 ; CHECK:   }
264 ; CHECK:   Pointer (0x1014) {
265 ; CHECK:     TypeLeafKind: LF_POINTER (0x1002)
266 ; CHECK:     PointeeType: <vftable 1 methods> (0x1013)
267 ; CHECK:     PtrType: Near64 (0xC)
268 ; CHECK:     PtrMode: Pointer (0x0)
269 ; CHECK:     IsFlat: 0
270 ; CHECK:     IsConst: 0
271 ; CHECK:     IsVolatile: 0
272 ; CHECK:     IsUnaligned: 0
273 ; CHECK:     SizeOf: 8
274 ; CHECK:   }
275 ; CHECK:   FieldList (0x1015) {
276 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
277 ; CHECK:     BaseClass {
278 ; CHECK:       AccessSpecifier: Public (0x3)
279 ; CHECK:       BaseType: Struct (0x1003)
280 ; CHECK:       BaseOffset: 0x0
281 ; CHECK:     }
282 ; CHECK:     VirtualBaseClass {
283 ; CHECK:       AccessSpecifier: Public (0x3)
284 ; CHECK:       BaseType: Class (0x100D)
285 ; CHECK:       VBPtrType: const int* (0x1012)
286 ; CHECK:       VBPtrOffset: 0x0
287 ; CHECK:       VBTableIndex: 0x1
288 ; CHECK:     }
289 ; CHECK:     VFPtr {
290 ; CHECK:       Type: <vftable 1 methods>* (0x1014)
291 ; CHECK:     }
292 ; CHECK:     DataMember {
293 ; CHECK:       AccessSpecifier: Public (0x3)
294 ; CHECK:       Type: int (0x74)
295 ; CHECK:       FieldOffset: 0x18
296 ; CHECK:       Name: d
297 ; CHECK:     }
298 ; CHECK:   }
299 ; CHECK:   Struct (0x1016) {
300 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
301 ; CHECK:     MemberCount: 4
302 ; CHECK:     Properties [ (0x200)
303 ; CHECK:       HasUniqueName (0x200)
304 ; CHECK:     ]
305 ; CHECK:     FieldList: <field list> (0x1015)
306 ; CHECK:     DerivedFrom: 0x0
307 ; CHECK:     VShape: 0x0
308 ; CHECK:     SizeOf: 48
309 ; CHECK:     Name: DerivedClass
310 ; CHECK:     LinkageName: .?AUDerivedClass@@
311 ; CHECK:   }
312 ; CHECK:   UdtSourceLine (0x1017) {
313 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
314 ; CHECK:     UDT: DerivedClass (0x1016)
315 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
316 ; CHECK:     LineNumber: 20
317 ; CHECK:   }
318 ; CHECK:   Struct (0x1018) {
319 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
320 ; CHECK:     MemberCount: 0
321 ; CHECK:     Properties [ (0x288)
322 ; CHECK:       ForwardReference (0x80)
323 ; CHECK:       HasUniqueName (0x200)
324 ; CHECK:       Nested (0x8)
325 ; CHECK:     ]
326 ; CHECK:     FieldList: 0x0
327 ; CHECK:     DerivedFrom: 0x0
328 ; CHECK:     VShape: 0x0
329 ; CHECK:     SizeOf: 0
330 ; CHECK:     Name: Class::Nested
331 ; CHECK:     LinkageName: .?AUNested@Class@@
332 ; CHECK:   }
333 ; CHECK:   FieldList (0x1019) {
334 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
335 ; CHECK:     DataMember {
336 ; CHECK:       AccessSpecifier: Public (0x3)
337 ; CHECK:       Type: int (0x74)
338 ; CHECK:       FieldOffset: 0x0
339 ; CHECK:       Name: n
340 ; CHECK:     }
341 ; CHECK:   }
342 ; CHECK:   Struct (0x101A) {
343 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
344 ; CHECK:     MemberCount: 1
345 ; CHECK:     Properties [ (0x208)
346 ; CHECK:       HasUniqueName (0x200)
347 ; CHECK:       Nested (0x8)
348 ; CHECK:     ]
349 ; CHECK:     FieldList: <field list> (0x1019)
350 ; CHECK:     DerivedFrom: 0x0
351 ; CHECK:     VShape: 0x0
352 ; CHECK:     SizeOf: 4
353 ; CHECK:     Name: Class::Nested
354 ; CHECK:     LinkageName: .?AUNested@Class@@
355 ; CHECK:   }
356 ; CHECK:   UdtSourceLine (0x101B) {
357 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
358 ; CHECK:     UDT: Class::Nested (0x101A)
359 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
360 ; CHECK:     LineNumber: 23
361 ; CHECK:   }
362 ; CHECK:   Pointer (0x101C) {
363 ; CHECK:     TypeLeafKind: LF_POINTER (0x1002)
364 ; CHECK:     PointeeType: DerivedClass (0x1011)
365 ; CHECK:     PtrType: Near64 (0xC)
366 ; CHECK:     PtrMode: Pointer (0x0)
367 ; CHECK:     IsFlat: 0
368 ; CHECK:     IsConst: 1
369 ; CHECK:     IsVolatile: 0
370 ; CHECK:     IsUnaligned: 0
371 ; CHECK:     SizeOf: 8
372 ; CHECK:   }
373 ; CHECK:   MemberFunction (0x101D) {
374 ; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)
375 ; CHECK:     ReturnType: void (0x3)
376 ; CHECK:     ClassType: DerivedClass (0x1011)
377 ; CHECK:     ThisType: DerivedClass* const (0x101C)
378 ; CHECK:     CallingConvention: NearC (0x0)
379 ; CHECK:     FunctionOptions [ (0x0)
380 ; CHECK:     ]
381 ; CHECK:     NumParameters: 0
382 ; CHECK:     ArgListType: () (0x1000)
383 ; CHECK:     ThisAdjustment: 0
384 ; CHECK:   }
385 ; CHECK:   MemberFuncId (0x101E) {
386 ; CHECK:     TypeLeafKind: LF_MFUNC_ID (0x1602)
387 ; CHECK:     ClassType: DerivedClass (0x1011)
388 ; CHECK:     FunctionType: void DerivedClass::() (0x101D)
389 ; CHECK:     Name: DerivedClass::DerivedClass
390 ; CHECK:   }
391 ; CHECK: ]
393 ; ASM: .section .debug$T,"dr"
394 ; ASM: .p2align 2
395 ; ASM: .long    4                       # Debug section magic
396 ; ASM: .short   0x6                     # Record length
397 ; ASM: .short   0x1201                  # Record kind: LF_ARGLIST
398 ; ASM: .long    0x0                     # NumArgs
399 ; ASM: # ArgList (0x1000) {
400 ; ASM: #   TypeLeafKind: LF_ARGLIST (0x1201)
401 ; ASM: #   NumArgs: 0
402 ; ASM: #   Arguments [
403 ; ASM: #   ]
404 ; ASM: # }
405 ; ASM: .short   0xe                     # Record length
406 ; ASM: .short   0x1008                  # Record kind: LF_PROCEDURE
407 ; ASM: .long    0x3                     # ReturnType
408 ; ASM: .byte    0x0                     # CallingConvention
409 ; ASM: .byte    0x0                     # FunctionOptions
410 ; ASM: .short   0x0                     # NumParameters
411 ; ASM: .long    0x1000                  # ArgListType
412 ; ASM: # Procedure (0x1001) {
413 ; ASM: #   TypeLeafKind: LF_PROCEDURE (0x1008)
414 ; ASM: #   ReturnType: void (0x3)
415 ; ASM: #   CallingConvention: NearC (0x0)
416 ; ASM: #   FunctionOptions [ (0x0)
417 ; ASM: #   ]
418 ; ASM: #   NumParameters: 0
419 ; ASM: #   ArgListType: () (0x1000)
420 ; ASM: # }
421 ; ASM: .short   0x16                    # Record length
422 ; ASM: .short   0x1601                  # Record kind: LF_FUNC_ID
423 ; ASM: .long    0x0                     # ParentScope
424 ; ASM: .long    0x1001                  # FunctionType
425 ; ASM: .asciz   "UseTypes"              # Name
426 ; ASM: .byte    243
427 ; ASM: .byte    242
428 ; ASM: .byte    241
429 ; ASM: # FuncId (0x1002) {
430 ; ASM: #   TypeLeafKind: LF_FUNC_ID (0x1601)
431 ; ASM: #   ParentScope: 0x0
432 ; ASM: #   FunctionType: void () (0x1001)
433 ; ASM: #   Name: UseTypes
434 ; ASM: # }
435 ; ASM: .short   0x2a                    # Record length
436 ; ASM: .short   0x1505                  # Record kind: LF_STRUCTURE
437 ; ASM: .short   0x0                     # MemberCount
438 ; ASM: .short   0x280                   # Properties
439 ; ASM: .long    0x0                     # FieldList
440 ; ASM: .long    0x0                     # DerivedFrom
441 ; ASM: .long    0x0                     # VShape
442 ; ASM: .short   0x0                     # SizeOf
443 ; ASM: .asciz   "Struct"                # Name
444 ; ASM: .asciz   ".?AUStruct@@"          # LinkageName
445 ; ASM: .byte    242
446 ; ASM: .byte    241
447 ; ASM: # Struct (0x1003) {
448 ; ASM: #   TypeLeafKind: LF_STRUCTURE (0x1505)
449 ; ASM: #   MemberCount: 0
450 ; ASM: #   Properties [ (0x280)
451 ; ASM: #     ForwardReference (0x80)
452 ; ASM: #     HasUniqueName (0x200)
453 ; ASM: #   ]
454 ; ASM: #   FieldList: 0x0
455 ; ASM: #   DerivedFrom: 0x0
456 ; ASM: #   VShape: 0x0
457 ; ASM: #   SizeOf: 0
458 ; ASM: #   Name: Struct
459 ; ASM: #   LinkageName: .?AUStruct@@
460 ; ASM: # }
461 ; ASM: .short   0xa                     # Record length
462 ; ASM: .short   0x1001                  # Record kind: LF_MODIFIER
463 ; ASM: .long    0x74                    # ModifiedType
464 ; ASM: .short   0x1                     # Modifiers
465 ; ASM: .byte    242
466 ; ASM: .byte    241
467 ; ASM: # Modifier (0x1004) {
468 ; ASM: #   TypeLeafKind: LF_MODIFIER (0x1001)
469 ; ASM: #   ModifiedType: int (0x74)
470 ; ASM: #   Modifiers [ (0x1)
471 ; ASM: #     Const (0x1)
472 ; ASM: #   ]
473 ; ASM: # }
474 ; ASM: .short   0x3e                    # Record length
475 ; ASM: .short   0x1203                  # Record kind: LF_FIELDLIST
476 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
477 ; ASM: .short   0x3                     # AccessSpecifier
478 ; ASM: .long    0x74                    # Type
479 ; ASM: .short   0x0                     # FieldOffset
480 ; ASM: .asciz   "s1"                    # Name
481 ; ASM: .byte    243
482 ; ASM: .byte    242
483 ; ASM: .byte    241
484 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
485 ; ASM: .short   0x3                     # AccessSpecifier
486 ; ASM: .long    0x74                    # Type
487 ; ASM: .short   0x4                     # FieldOffset
488 ; ASM: .asciz   "s2"                    # Name
489 ; ASM: .byte    243
490 ; ASM: .byte    242
491 ; ASM: .byte    241
492 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
493 ; ASM: .short   0x3                     # AccessSpecifier
494 ; ASM: .long    0x74                    # Type
495 ; ASM: .short   0x8                     # FieldOffset
496 ; ASM: .asciz   "s3"                    # Name
497 ; ASM: .byte    243
498 ; ASM: .byte    242
499 ; ASM: .byte    241
500 ; ASM: .short   0x150e                  # Member kind: LF_STMEMBER
501 ; ASM: .short   0x3                     # AccessSpecifier
502 ; ASM: .long    0x1004                  # Type
503 ; ASM: .asciz   "sdm"                   # Name
504 ; ASM: # FieldList (0x1005) {
505 ; ASM: #   TypeLeafKind: LF_FIELDLIST (0x1203)
506 ; ASM: #   DataMember {
507 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
508 ; ASM: #     AccessSpecifier: Public (0x3)
509 ; ASM: #     Type: int (0x74)
510 ; ASM: #     FieldOffset: 0x0
511 ; ASM: #     Name: s1
512 ; ASM: #   }
513 ; ASM: #   DataMember {
514 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
515 ; ASM: #     AccessSpecifier: Public (0x3)
516 ; ASM: #     Type: int (0x74)
517 ; ASM: #     FieldOffset: 0x4
518 ; ASM: #     Name: s2
519 ; ASM: #   }
520 ; ASM: #   DataMember {
521 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
522 ; ASM: #     AccessSpecifier: Public (0x3)
523 ; ASM: #     Type: int (0x74)
524 ; ASM: #     FieldOffset: 0x8
525 ; ASM: #     Name: s3
526 ; ASM: #   }
527 ; ASM: #   StaticDataMember {
528 ; ASM: #     TypeLeafKind: LF_STMEMBER (0x150E)
529 ; ASM: #     AccessSpecifier: Public (0x3)
530 ; ASM: #     Type: const int (0x1004)
531 ; ASM: #     Name: sdm
532 ; ASM: #   }
533 ; ASM: # }
534 ; ASM: .short   0x2a                    # Record length
535 ; ASM: .short   0x1505                  # Record kind: LF_STRUCTURE
536 ; ASM: .short   0x4                     # MemberCount
537 ; ASM: .short   0x200                   # Properties
538 ; ASM: .long    0x1005                  # FieldList
539 ; ASM: .long    0x0                     # DerivedFrom
540 ; ASM: .long    0x0                     # VShape
541 ; ASM: .short   0xc                     # SizeOf
542 ; ASM: .asciz   "Struct"                # Name
543 ; ASM: .asciz   ".?AUStruct@@"          # LinkageName
544 ; ASM: .byte    242
545 ; ASM: .byte    241
546 ; ASM: # Struct (0x1006) {
547 ; ASM: #   TypeLeafKind: LF_STRUCTURE (0x1505)
548 ; ASM: #   MemberCount: 4
549 ; ASM: #   Properties [ (0x200)
550 ; ASM: #     HasUniqueName (0x200)
551 ; ASM: #   ]
552 ; ASM: #   FieldList: <field list> (0x1005)
553 ; ASM: #   DerivedFrom: 0x0
554 ; ASM: #   VShape: 0x0
555 ; ASM: #   SizeOf: 12
556 ; ASM: #   Name: Struct
557 ; ASM: #   LinkageName: .?AUStruct@@
558 ; ASM: # }
559 ; ASM: .short   0x1e                    # Record length
560 ; ASM: .short   0x1605                  # Record kind: LF_STRING_ID
561 ; ASM: .long    0x0                     # Id
562 ; ASM: .asciz   "D:\\src\\llvm\\build\\t.cpp" # StringData
563 ; ASM: # StringId (0x1007) {
564 ; ASM: #   TypeLeafKind: LF_STRING_ID (0x1605)
565 ; ASM: #   Id: 0x0
566 ; ASM: #   StringData: D:\src\llvm\build\t.cpp
567 ; ASM: # }
568 ; ASM: .short   0xe                     # Record length
569 ; ASM: .short   0x1606                  # Record kind: LF_UDT_SRC_LINE
570 ; ASM: .long    0x1006                  # UDT
571 ; ASM: .long    0x1007                  # SourceFile
572 ; ASM: .long    0x1                     # LineNumber
573 ; ASM: # UdtSourceLine (0x1008) {
574 ; ASM: #   TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
575 ; ASM: #   UDT: Struct (0x1006)
576 ; ASM: #   SourceFile: D:\src\llvm\build\t.cpp (0x1007)
577 ; ASM: #   LineNumber: 1
578 ; ASM: # }
579 ; ASM: .short   0x1e                    # Record length
580 ; ASM: .short   0x1506                  # Record kind: LF_UNION
581 ; ASM: .short   0x0                     # MemberCount
582 ; ASM: .short   0x280                   # Properties
583 ; ASM: .long    0x0                     # FieldList
584 ; ASM: .short   0x0                     # SizeOf
585 ; ASM: .asciz   "Union"                 # Name
586 ; ASM: .asciz   ".?ATUnion@@"           # LinkageName
587 ; ASM: # Union (0x1009) {
588 ; ASM: #   TypeLeafKind: LF_UNION (0x1506)
589 ; ASM: #   MemberCount: 0
590 ; ASM: #   Properties [ (0x280)
591 ; ASM: #     ForwardReference (0x80)
592 ; ASM: #     HasUniqueName (0x200)
593 ; ASM: #   ]
594 ; ASM: #   FieldList: 0x0
595 ; ASM: #   SizeOf: 0
596 ; ASM: #   Name: Union
597 ; ASM: #   LinkageName: .?ATUnion@@
598 ; ASM: # }
599 ; ASM: .short   0x1a                    # Record length
600 ; ASM: .short   0x1203                  # Record kind: LF_FIELDLIST
601 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
602 ; ASM: .short   0x3                     # AccessSpecifier
603 ; ASM: .long    0x74                    # Type
604 ; ASM: .short   0x0                     # FieldOffset
605 ; ASM: .asciz   "a"                     # Name
606 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
607 ; ASM: .short   0x3                     # AccessSpecifier
608 ; ASM: .long    0x40                    # Type
609 ; ASM: .short   0x0                     # FieldOffset
610 ; ASM: .asciz   "b"                     # Name
611 ; ASM: # FieldList (0x100A) {
612 ; ASM: #   TypeLeafKind: LF_FIELDLIST (0x1203)
613 ; ASM: #   DataMember {
614 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
615 ; ASM: #     AccessSpecifier: Public (0x3)
616 ; ASM: #     Type: int (0x74)
617 ; ASM: #     FieldOffset: 0x0
618 ; ASM: #     Name: a
619 ; ASM: #   }
620 ; ASM: #   DataMember {
621 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
622 ; ASM: #     AccessSpecifier: Public (0x3)
623 ; ASM: #     Type: float (0x40)
624 ; ASM: #     FieldOffset: 0x0
625 ; ASM: #     Name: b
626 ; ASM: #   }
627 ; ASM: # }
628 ; ASM: .short   0x1e                    # Record length
629 ; ASM: .short   0x1506                  # Record kind: LF_UNION
630 ; ASM: .short   0x2                     # MemberCount
631 ; ASM: .short   0x600                   # Properties
632 ; ASM: .long    0x100a                  # FieldList
633 ; ASM: .short   0x4                     # SizeOf
634 ; ASM: .asciz   "Union"                 # Name
635 ; ASM: .asciz   ".?ATUnion@@"           # LinkageName
636 ; ASM: # Union (0x100B) {
637 ; ASM: #   TypeLeafKind: LF_UNION (0x1506)
638 ; ASM: #   MemberCount: 2
639 ; ASM: #   Properties [ (0x600)
640 ; ASM: #     HasUniqueName (0x200)
641 ; ASM: #     Sealed (0x400)
642 ; ASM: #   ]
643 ; ASM: #   FieldList: <field list> (0x100A)
644 ; ASM: #   SizeOf: 4
645 ; ASM: #   Name: Union
646 ; ASM: #   LinkageName: .?ATUnion@@
647 ; ASM: # }
648 ; ASM: .short   0xe                     # Record length
649 ; ASM: .short   0x1606                  # Record kind: LF_UDT_SRC_LINE
650 ; ASM: .long    0x100b                  # UDT
651 ; ASM: .long    0x1007                  # SourceFile
652 ; ASM: .long    0x7                     # LineNumber
653 ; ASM: # UdtSourceLine (0x100C) {
654 ; ASM: #   TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
655 ; ASM: #   UDT: Union (0x100B)
656 ; ASM: #   SourceFile: D:\src\llvm\build\t.cpp (0x1007)
657 ; ASM: #   LineNumber: 7
658 ; ASM: # }
659 ; ASM: .short   0x26                    # Record length
660 ; ASM: .short   0x1504                  # Record kind: LF_CLASS
661 ; ASM: .short   0x0                     # MemberCount
662 ; ASM: .short   0x280                   # Properties
663 ; ASM: .long    0x0                     # FieldList
664 ; ASM: .long    0x0                     # DerivedFrom
665 ; ASM: .long    0x0                     # VShape
666 ; ASM: .short   0x0                     # SizeOf
667 ; ASM: .asciz   "Class"                 # Name
668 ; ASM: .asciz   ".?AVClass@@"           # LinkageName
669 ; ASM: # Class (0x100D) {
670 ; ASM: #   TypeLeafKind: LF_CLASS (0x1504)
671 ; ASM: #   MemberCount: 0
672 ; ASM: #   Properties [ (0x280)
673 ; ASM: #     ForwardReference (0x80)
674 ; ASM: #     HasUniqueName (0x200)
675 ; ASM: #   ]
676 ; ASM: #   FieldList: 0x0
677 ; ASM: #   DerivedFrom: 0x0
678 ; ASM: #   VShape: 0x0
679 ; ASM: #   SizeOf: 0
680 ; ASM: #   Name: Class
681 ; ASM: #   LinkageName: .?AVClass@@
682 ; ASM: # }
683 ; ASM: .short   0x32                    # Record length
684 ; ASM: .short   0x1203                  # Record kind: LF_FIELDLIST
685 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
686 ; ASM: .short   0x3                     # AccessSpecifier
687 ; ASM: .long    0x74                    # Type
688 ; ASM: .short   0x0                     # FieldOffset
689 ; ASM: .asciz   "pub"                   # Name
690 ; ASM: .byte    242
691 ; ASM: .byte    241
692 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
693 ; ASM: .short   0x1                     # AccessSpecifier
694 ; ASM: .long    0x74                    # Type
695 ; ASM: .short   0x4                     # FieldOffset
696 ; ASM: .asciz   "priv"                  # Name
697 ; ASM: .byte    241
698 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
699 ; ASM: .short   0x2                     # AccessSpecifier
700 ; ASM: .long    0x74                    # Type
701 ; ASM: .short   0x8                     # FieldOffset
702 ; ASM: .asciz   "prot"                  # Name
703 ; ASM: .byte    241
704 ; ASM: # FieldList (0x100E) {
705 ; ASM: #   TypeLeafKind: LF_FIELDLIST (0x1203)
706 ; ASM: #   DataMember {
707 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
708 ; ASM: #     AccessSpecifier: Public (0x3)
709 ; ASM: #     Type: int (0x74)
710 ; ASM: #     FieldOffset: 0x0
711 ; ASM: #     Name: pub
712 ; ASM: #   }
713 ; ASM: #   DataMember {
714 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
715 ; ASM: #     AccessSpecifier: Private (0x1)
716 ; ASM: #     Type: int (0x74)
717 ; ASM: #     FieldOffset: 0x4
718 ; ASM: #     Name: priv
719 ; ASM: #   }
720 ; ASM: #   DataMember {
721 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
722 ; ASM: #     AccessSpecifier: Protected (0x2)
723 ; ASM: #     Type: int (0x74)
724 ; ASM: #     FieldOffset: 0x8
725 ; ASM: #     Name: prot
726 ; ASM: #   }
727 ; ASM: # }
728 ; ASM: .short   0x26                    # Record length
729 ; ASM: .short   0x1504                  # Record kind: LF_CLASS
730 ; ASM: .short   0x3                     # MemberCount
731 ; ASM: .short   0x200                   # Properties
732 ; ASM: .long    0x100e                  # FieldList
733 ; ASM: .long    0x0                     # DerivedFrom
734 ; ASM: .long    0x0                     # VShape
735 ; ASM: .short   0xc                     # SizeOf
736 ; ASM: .asciz   "Class"                 # Name
737 ; ASM: .asciz   ".?AVClass@@"           # LinkageName
738 ; ASM: # Class (0x100F) {
739 ; ASM: #   TypeLeafKind: LF_CLASS (0x1504)
740 ; ASM: #   MemberCount: 3
741 ; ASM: #   Properties [ (0x200)
742 ; ASM: #     HasUniqueName (0x200)
743 ; ASM: #   ]
744 ; ASM: #   FieldList: <field list> (0x100E)
745 ; ASM: #   DerivedFrom: 0x0
746 ; ASM: #   VShape: 0x0
747 ; ASM: #   SizeOf: 12
748 ; ASM: #   Name: Class
749 ; ASM: #   LinkageName: .?AVClass@@
750 ; ASM: # }
751 ; ASM: .short   0xe                     # Record length
752 ; ASM: .short   0x1606                  # Record kind: LF_UDT_SRC_LINE
753 ; ASM: .long    0x100f                  # UDT
754 ; ASM: .long    0x1007                  # SourceFile
755 ; ASM: .long    0xb                     # LineNumber
756 ; ASM: # UdtSourceLine (0x1010) {
757 ; ASM: #   TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
758 ; ASM: #   UDT: Class (0x100F)
759 ; ASM: #   SourceFile: D:\src\llvm\build\t.cpp (0x1007)
760 ; ASM: #   LineNumber: 11
761 ; ASM: # }
762 ; ASM: .short   0x36                    # Record length
763 ; ASM: .short   0x1505                  # Record kind: LF_STRUCTURE
764 ; ASM: .short   0x0                     # MemberCount
765 ; ASM: .short   0x280                   # Properties
766 ; ASM: .long    0x0                     # FieldList
767 ; ASM: .long    0x0                     # DerivedFrom
768 ; ASM: .long    0x0                     # VShape
769 ; ASM: .short   0x0                     # SizeOf
770 ; ASM: .asciz   "DerivedClass"          # Name
771 ; ASM: .asciz   ".?AUDerivedClass@@"    # LinkageName
772 ; ASM: .byte    242
773 ; ASM: .byte    241
774 ; ASM: # Struct (0x1011) {
775 ; ASM: #   TypeLeafKind: LF_STRUCTURE (0x1505)
776 ; ASM: #   MemberCount: 0
777 ; ASM: #   Properties [ (0x280)
778 ; ASM: #     ForwardReference (0x80)
779 ; ASM: #     HasUniqueName (0x200)
780 ; ASM: #   ]
781 ; ASM: #   FieldList: 0x0
782 ; ASM: #   DerivedFrom: 0x0
783 ; ASM: #   VShape: 0x0
784 ; ASM: #   SizeOf: 0
785 ; ASM: #   Name: DerivedClass
786 ; ASM: #   LinkageName: .?AUDerivedClass@@
787 ; ASM: # }
788 ; ASM: .short   0xa                     # Record length
789 ; ASM: .short   0x1002                  # Record kind: LF_POINTER
790 ; ASM: .long    0x1004                  # PointeeType
791 ; ASM: .long    0x1000c                 # Attributes
792 ; ASM: # Pointer (0x1012) {
793 ; ASM: #   TypeLeafKind: LF_POINTER (0x1002)
794 ; ASM: #   PointeeType: const int (0x1004)
795 ; ASM: #   PtrType: Near64 (0xC)
796 ; ASM: #   PtrMode: Pointer (0x0)
797 ; ASM: #   IsFlat: 0
798 ; ASM: #   IsConst: 0
799 ; ASM: #   IsVolatile: 0
800 ; ASM: #   IsUnaligned: 0
801 ; ASM: #   IsRestrict: 0
802 ; ASM: #   IsThisPtr&: 0
803 ; ASM: #   IsThisPtr&&: 0
804 ; ASM: #   SizeOf: 8
805 ; ASM: # }
806 ; ASM: .short   0x6                     # Record length
807 ; ASM: .short   0xa                     # Record kind: LF_VTSHAPE
808 ; ASM: .short   0x1                     # VFEntryCount
809 ; ASM: .byte    0x0
810 ; ASM: .byte    241
811 ; ASM: # VFTableShape (0x1013) {
812 ; ASM: #   TypeLeafKind: LF_VTSHAPE (0xA)
813 ; ASM: #   VFEntryCount: 1
814 ; ASM: # }
815 ; ASM: .short   0xa                     # Record length
816 ; ASM: .short   0x1002                  # Record kind: LF_POINTER
817 ; ASM: .long    0x1013                  # PointeeType
818 ; ASM: .long    0x1000c                 # Attributes
819 ; ASM: # Pointer (0x1014) {
820 ; ASM: #   TypeLeafKind: LF_POINTER (0x1002)
821 ; ASM: #   PointeeType: <vftable 1 methods> (0x1013)
822 ; ASM: #   PtrType: Near64 (0xC)
823 ; ASM: #   PtrMode: Pointer (0x0)
824 ; ASM: #   IsFlat: 0
825 ; ASM: #   IsConst: 0
826 ; ASM: #   IsVolatile: 0
827 ; ASM: #   IsUnaligned: 0
828 ; ASM: #   IsRestrict: 0
829 ; ASM: #   IsThisPtr&: 0
830 ; ASM: #   IsThisPtr&&: 0
831 ; ASM: #   SizeOf: 8
832 ; ASM: # }
833 ; ASM: .short   0x32                    # Record length
834 ; ASM: .short   0x1203                  # Record kind: LF_FIELDLIST
835 ; ASM: .short   0x1400                  # Member kind: LF_BCLASS
836 ; ASM: .short   0x3                     # AccessSpecifier
837 ; ASM: .long    0x1003                  # BaseType
838 ; ASM: .short   0x0                     # BaseOffset
839 ; ASM: .byte    242
840 ; ASM: .byte    241
841 ; ASM: .short   0x1401                  # Member kind: LF_VBCLASS
842 ; ASM: .short   0x3                     # AccessSpecifier
843 ; ASM: .long    0x100d                  # BaseType
844 ; ASM: .long    0x1012                  # VBPtrType
845 ; ASM: .short   0x0                     # VBPtrOffset
846 ; ASM: .short   0x1                     # VBTableIndex
847 ; ASM: .short   0x1409                  # Member kind: LF_VFUNCTAB
848 ; ASM: .short   0x0                     # Padding
849 ; ASM: .long    0x1014                  # Type
850 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
851 ; ASM: .short   0x3                     # AccessSpecifier
852 ; ASM: .long    0x74                    # Type
853 ; ASM: .short   0x18                    # FieldOffset
854 ; ASM: .asciz   "d"                     # Name
855 ; ASM: # FieldList (0x1015) {
856 ; ASM: #   TypeLeafKind: LF_FIELDLIST (0x1203)
857 ; ASM: #   BaseClass {
858 ; ASM: #     TypeLeafKind: LF_BCLASS (0x1400)
859 ; ASM: #     AccessSpecifier: Public (0x3)
860 ; ASM: #     BaseType: Struct (0x1003)
861 ; ASM: #     BaseOffset: 0x0
862 ; ASM: #   }
863 ; ASM: #   VirtualBaseClass {
864 ; ASM: #     TypeLeafKind: LF_VBCLASS (0x1401)
865 ; ASM: #     AccessSpecifier: Public (0x3)
866 ; ASM: #     BaseType: Class (0x100D)
867 ; ASM: #     VBPtrType: const int* (0x1012)
868 ; ASM: #     VBPtrOffset: 0x0
869 ; ASM: #     VBTableIndex: 0x1
870 ; ASM: #   }
871 ; ASM: #   VFPtr {
872 ; ASM: #     TypeLeafKind: LF_VFUNCTAB (0x1409)
873 ; ASM: #     Type: <vftable 1 methods>* (0x1014)
874 ; ASM: #   }
875 ; ASM: #   DataMember {
876 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
877 ; ASM: #     AccessSpecifier: Public (0x3)
878 ; ASM: #     Type: int (0x74)
879 ; ASM: #     FieldOffset: 0x18
880 ; ASM: #     Name: d
881 ; ASM: #   }
882 ; ASM: # }
883 ; ASM: .short   0x36                    # Record length
884 ; ASM: .short   0x1505                  # Record kind: LF_STRUCTURE
885 ; ASM: .short   0x4                     # MemberCount
886 ; ASM: .short   0x200                   # Properties
887 ; ASM: .long    0x1015                  # FieldList
888 ; ASM: .long    0x0                     # DerivedFrom
889 ; ASM: .long    0x0                     # VShape
890 ; ASM: .short   0x30                    # SizeOf
891 ; ASM: .asciz   "DerivedClass"          # Name
892 ; ASM: .asciz   ".?AUDerivedClass@@"    # LinkageName
893 ; ASM: .byte    242
894 ; ASM: .byte    241
895 ; ASM: # Struct (0x1016) {
896 ; ASM: #   TypeLeafKind: LF_STRUCTURE (0x1505)
897 ; ASM: #   MemberCount: 4
898 ; ASM: #   Properties [ (0x200)
899 ; ASM: #     HasUniqueName (0x200)
900 ; ASM: #   ]
901 ; ASM: #   FieldList: <field list> (0x1015)
902 ; ASM: #   DerivedFrom: 0x0
903 ; ASM: #   VShape: 0x0
904 ; ASM: #   SizeOf: 48
905 ; ASM: #   Name: DerivedClass
906 ; ASM: #   LinkageName: .?AUDerivedClass@@
907 ; ASM: # }
908 ; ASM: .short   0xe                     # Record length
909 ; ASM: .short   0x1606                  # Record kind: LF_UDT_SRC_LINE
910 ; ASM: .long    0x1016                  # UDT
911 ; ASM: .long    0x1007                  # SourceFile
912 ; ASM: .long    0x14                    # LineNumber
913 ; ASM: # UdtSourceLine (0x1017) {
914 ; ASM: #   TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
915 ; ASM: #   UDT: DerivedClass (0x1016)
916 ; ASM: #   SourceFile: D:\src\llvm\build\t.cpp (0x1007)
917 ; ASM: #   LineNumber: 20
918 ; ASM: # }
919 ; ASM: .short   0x36                    # Record length
920 ; ASM: .short   0x1505                  # Record kind: LF_STRUCTURE
921 ; ASM: .short   0x0                     # MemberCount
922 ; ASM: .short   0x288                   # Properties
923 ; ASM: .long    0x0                     # FieldList
924 ; ASM: .long    0x0                     # DerivedFrom
925 ; ASM: .long    0x0                     # VShape
926 ; ASM: .short   0x0                     # SizeOf
927 ; ASM: .asciz   "Class::Nested"         # Name
928 ; ASM: .asciz   ".?AUNested@Class@@"    # LinkageName
929 ; ASM: .byte    241
930 ; ASM: # Struct (0x1018) {
931 ; ASM: #   TypeLeafKind: LF_STRUCTURE (0x1505)
932 ; ASM: #   MemberCount: 0
933 ; ASM: #   Properties [ (0x288)
934 ; ASM: #     ForwardReference (0x80)
935 ; ASM: #     HasUniqueName (0x200)
936 ; ASM: #     Nested (0x8)
937 ; ASM: #   ]
938 ; ASM: #   FieldList: 0x0
939 ; ASM: #   DerivedFrom: 0x0
940 ; ASM: #   VShape: 0x0
941 ; ASM: #   SizeOf: 0
942 ; ASM: #   Name: Class::Nested
943 ; ASM: #   LinkageName: .?AUNested@Class@@
944 ; ASM: # }
945 ; ASM: .short   0xe                     # Record length
946 ; ASM: .short   0x1203                  # Record kind: LF_FIELDLIST
947 ; ASM: .short   0x150d                  # Member kind: LF_MEMBER
948 ; ASM: .short   0x3                     # AccessSpecifier
949 ; ASM: .long    0x74                    # Type
950 ; ASM: .short   0x0                     # FieldOffset
951 ; ASM: .asciz   "n"                     # Name
952 ; ASM: # FieldList (0x1019) {
953 ; ASM: #   TypeLeafKind: LF_FIELDLIST (0x1203)
954 ; ASM: #   DataMember {
955 ; ASM: #     TypeLeafKind: LF_MEMBER (0x150D)
956 ; ASM: #     AccessSpecifier: Public (0x3)
957 ; ASM: #     Type: int (0x74)
958 ; ASM: #     FieldOffset: 0x0
959 ; ASM: #     Name: n
960 ; ASM: #   }
961 ; ASM: # }
962 ; ASM: .short   0x36                    # Record length
963 ; ASM: .short   0x1505                  # Record kind: LF_STRUCTURE
964 ; ASM: .short   0x1                     # MemberCount
965 ; ASM: .short   0x208                   # Properties
966 ; ASM: .long    0x1019                  # FieldList
967 ; ASM: .long    0x0                     # DerivedFrom
968 ; ASM: .long    0x0                     # VShape
969 ; ASM: .short   0x4                     # SizeOf
970 ; ASM: .asciz   "Class::Nested"         # Name
971 ; ASM: .asciz   ".?AUNested@Class@@"    # LinkageName
972 ; ASM: .byte    241
973 ; ASM: # Struct (0x101A) {
974 ; ASM: #   TypeLeafKind: LF_STRUCTURE (0x1505)
975 ; ASM: #   MemberCount: 1
976 ; ASM: #   Properties [ (0x208)
977 ; ASM: #     HasUniqueName (0x200)
978 ; ASM: #     Nested (0x8)
979 ; ASM: #   ]
980 ; ASM: #   FieldList: <field list> (0x1019)
981 ; ASM: #   DerivedFrom: 0x0
982 ; ASM: #   VShape: 0x0
983 ; ASM: #   SizeOf: 4
984 ; ASM: #   Name: Class::Nested
985 ; ASM: #   LinkageName: .?AUNested@Class@@
986 ; ASM: # }
987 ; ASM: .short   0xe                     # Record length
988 ; ASM: .short   0x1606                  # Record kind: LF_UDT_SRC_LINE
989 ; ASM: .long    0x101a                  # UDT
990 ; ASM: .long    0x1007                  # SourceFile
991 ; ASM: .long    0x17                    # LineNumber
992 ; ASM: # UdtSourceLine (0x101B) {
993 ; ASM: #   TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
994 ; ASM: #   UDT: Class::Nested (0x101A)
995 ; ASM: #   SourceFile: D:\src\llvm\build\t.cpp (0x1007)
996 ; ASM: #   LineNumber: 23
997 ; ASM: # }
998 ; ASM: .short   0xa                     # Record length
999 ; ASM: .short   0x1002                  # Record kind: LF_POINTER
1000 ; ASM: .long    0x1011                  # PointeeType
1001 ; ASM: .long    0x1040c                 # Attributes
1002 ; ASM: # Pointer (0x101C) {
1003 ; ASM: #   TypeLeafKind: LF_POINTER (0x1002)
1004 ; ASM: #   PointeeType: DerivedClass (0x1011)
1005 ; ASM: #   PtrType: Near64 (0xC)
1006 ; ASM: #   PtrMode: Pointer (0x0)
1007 ; ASM: #   IsFlat: 0
1008 ; ASM: #   IsConst: 1
1009 ; ASM: #   IsVolatile: 0
1010 ; ASM: #   IsUnaligned: 0
1011 ; ASM: #   IsRestrict: 0
1012 ; ASM: #   IsThisPtr&: 0
1013 ; ASM: #   IsThisPtr&&: 0
1014 ; ASM: #   SizeOf: 8
1015 ; ASM: # }
1016 ; ASM: .short   0x1a                    # Record length
1017 ; ASM: .short   0x1009                  # Record kind: LF_MFUNCTION
1018 ; ASM: .long    0x3                     # ReturnType
1019 ; ASM: .long    0x1011                  # ClassType
1020 ; ASM: .long    0x101c                  # ThisType
1021 ; ASM: .byte    0x0                     # CallingConvention
1022 ; ASM: .byte    0x0                     # FunctionOptions
1023 ; ASM: .short   0x0                     # NumParameters
1024 ; ASM: .long    0x1000                  # ArgListType
1025 ; ASM: .long    0x0                     # ThisAdjustment
1026 ; ASM: # MemberFunction (0x101D) {
1027 ; ASM: #   TypeLeafKind: LF_MFUNCTION (0x1009)
1028 ; ASM: #   ReturnType: void (0x3)
1029 ; ASM: #   ClassType: DerivedClass (0x1011)
1030 ; ASM: #   ThisType: DerivedClass* const (0x101C)
1031 ; ASM: #   CallingConvention: NearC (0x0)
1032 ; ASM: #   FunctionOptions [ (0x0)
1033 ; ASM: #   ]
1034 ; ASM: #   NumParameters: 0
1035 ; ASM: #   ArgListType: () (0x1000)
1036 ; ASM: #   ThisAdjustment: 0
1037 ; ASM: # }
1038 ; ASM: .short   0x26                    # Record length
1039 ; ASM: .short   0x1602                  # Record kind: LF_MFUNC_ID
1040 ; ASM: .long    0x1011                  # ClassType
1041 ; ASM: .long    0x101d                  # FunctionType
1042 ; ASM: .asciz   "DerivedClass::DerivedClass" # Name
1043 ; ASM: .byte    241
1044 ; ASM: # MemberFuncId (0x101E) {
1045 ; ASM: #   TypeLeafKind: LF_MFUNC_ID (0x1602)
1046 ; ASM: #   ClassType: DerivedClass (0x1011)
1047 ; ASM: #   FunctionType: void DerivedClass::() (0x101D)
1048 ; ASM: #   Name: DerivedClass::DerivedClass
1049 ; ASM: # }
1050 ; ASM: .short   0xa                     # Record length
1051 ; ASM: .short   0x1002                  # Record kind: LF_POINTER
1052 ; ASM: .long    0x1011                  # PointeeType
1053 ; ASM: .long    0x1000c                 # Attributes
1054 ; ASM: # Pointer (0x101F) {
1055 ; ASM: #   TypeLeafKind: LF_POINTER (0x1002)
1056 ; ASM: #   PointeeType: DerivedClass (0x1011)
1057 ; ASM: #   PtrType: Near64 (0xC)
1058 ; ASM: #   PtrMode: Pointer (0x0)
1059 ; ASM: #   IsFlat: 0
1060 ; ASM: #   IsConst: 0
1061 ; ASM: #   IsVolatile: 0
1062 ; ASM: #   IsUnaligned: 0
1063 ; ASM: #   IsRestrict: 0
1064 ; ASM: #   IsThisPtr&: 0
1065 ; ASM: #   IsThisPtr&&: 0
1066 ; ASM: #   SizeOf: 8
1067 ; ASM: # }
1068 ; ASM: .short   0x1a                    # Record length
1069 ; ASM: .short   0x1605                  # Record kind: LF_STRING_ID
1070 ; ASM: .long    0x0                     # Id
1071 ; ASM: .asciz   "D:\\src\\llvm\\build"  # StringData
1072 ; ASM: .byte    242
1073 ; ASM: .byte    241
1074 ; ASM: # StringId (0x1020) {
1075 ; ASM: #   TypeLeafKind: LF_STRING_ID (0x1605)
1076 ; ASM: #   Id: 0x0
1077 ; ASM: #   StringData: D:\src\llvm\build
1078 ; ASM: # }
1079 ; ASM: .short   0xe                     # Record length
1080 ; ASM: .short   0x1605                  # Record kind: LF_STRING_ID
1081 ; ASM: .long    0x0                     # Id
1082 ; ASM: .asciz   "t.cpp"                 # StringData
1083 ; ASM: .byte    242
1084 ; ASM: .byte    241
1085 ; ASM: # StringId (0x1021) {
1086 ; ASM: #   TypeLeafKind: LF_STRING_ID (0x1605)
1087 ; ASM: #   Id: 0x0
1088 ; ASM: #   StringData: t.cpp
1089 ; ASM: # }
1090 ; ASM: .short   0x1a                    # Record length
1091 ; ASM: .short   0x1603                  # Record kind: LF_BUILDINFO
1092 ; ASM: .short   0x5                     # NumArgs
1093 ; ASM: .long    0x1020                  # Argument
1094 ; ASM: .long    0x0                     # Argument
1095 ; ASM: .long    0x1021                  # Argument
1096 ; ASM: .long    0x0                     # Argument
1097 ; ASM: .long    0x0                     # Argument
1098 ; ASM: .byte    242
1099 ; ASM: .byte    241
1100 ; ASM: # BuildInfo (0x1022) {
1101 ; ASM: #   TypeLeafKind: LF_BUILDINFO (0x1603)
1102 ; ASM: #   NumArgs: 5
1103 ; ASM: #   Arguments [
1104 ; ASM: #     ArgType: D:\src\llvm\build (0x1020)
1105 ; ASM: #     ArgType: 0x0
1106 ; ASM: #     ArgType: t.cpp (0x1021)
1107 ; ASM: #     ArgType: 0x0
1108 ; ASM: #     ArgType: 0x0
1109 ; ASM: #   ]
1110 ; ASM: # }
1112 ; ModuleID = 't.cpp'
1113 source_filename = "t.cpp"
1114 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
1115 target triple = "x86_64-pc-windows-msvc19.0.23918"
1117 %struct.Struct = type { i32, i32, i32 }
1118 %union.Union = type { i32 }
1119 %class.Class = type { i32, i32, i32 }
1120 %struct.DerivedClass = type { %struct.Struct, i32*, i32, [4 x i8], %class.Class }
1121 %"struct.Class::Nested" = type { i32 }
1123 $"\01??0DerivedClass@@QEAA@XZ" = comdat any
1125 $"\01??_8DerivedClass@@7B@" = comdat any
1127 @"\01??_8DerivedClass@@7B@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 -16, i32 16], comdat
1129 ; Function Attrs: nounwind uwtable
1130 define void @"\01?UseTypes@@YAXXZ"() #0 !dbg !7 {
1131 entry:
1132   %s = alloca %struct.Struct, align 4
1133   %u = alloca %union.Union, align 4
1134   %c = alloca %class.Class, align 4
1135   %dc = alloca %struct.DerivedClass, align 8
1136   %n = alloca %"struct.Class::Nested", align 4
1137   call void @llvm.dbg.declare(metadata %struct.Struct* %s, metadata !10, metadata !19), !dbg !20
1138   call void @llvm.dbg.declare(metadata %union.Union* %u, metadata !21, metadata !19), !dbg !27
1139   call void @llvm.dbg.declare(metadata %class.Class* %c, metadata !28, metadata !19), !dbg !34
1140   call void @llvm.dbg.declare(metadata %struct.DerivedClass* %dc, metadata !35, metadata !19), !dbg !46
1141   %call = call %struct.DerivedClass* @"\01??0DerivedClass@@QEAA@XZ"(%struct.DerivedClass* %dc, i32 1) #3, !dbg !46
1142   call void @llvm.dbg.declare(metadata %"struct.Class::Nested"* %n, metadata !47, metadata !19), !dbg !51
1143   ret void, !dbg !52
1146 ; Function Attrs: nounwind readnone
1147 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
1149 ; Function Attrs: inlinehint nounwind uwtable
1150 define linkonce_odr %struct.DerivedClass* @"\01??0DerivedClass@@QEAA@XZ"(%struct.DerivedClass* returned %this, i32 %is_most_derived) unnamed_addr #2 comdat align 2 !dbg !53 {
1151 entry:
1152   %retval = alloca %struct.DerivedClass*, align 8
1153   %is_most_derived.addr = alloca i32, align 4
1154   %this.addr = alloca %struct.DerivedClass*, align 8
1155   store i32 %is_most_derived, i32* %is_most_derived.addr, align 4
1156   call void @llvm.dbg.declare(metadata i32* %is_most_derived.addr, metadata !58, metadata !19), !dbg !59
1157   store %struct.DerivedClass* %this, %struct.DerivedClass** %this.addr, align 8
1158   call void @llvm.dbg.declare(metadata %struct.DerivedClass** %this.addr, metadata !60, metadata !19), !dbg !59
1159   %this1 = load %struct.DerivedClass*, %struct.DerivedClass** %this.addr, align 8
1160   store %struct.DerivedClass* %this1, %struct.DerivedClass** %retval, align 8
1161   %is_most_derived2 = load i32, i32* %is_most_derived.addr, align 4
1162   %is_complete_object = icmp ne i32 %is_most_derived2, 0, !dbg !62
1163   br i1 %is_complete_object, label %ctor.init_vbases, label %ctor.skip_vbases, !dbg !62
1165 ctor.init_vbases:                                 ; preds = %entry
1166   %this.int8 = bitcast %struct.DerivedClass* %this1 to i8*, !dbg !62
1167   %0 = getelementptr inbounds i8, i8* %this.int8, i64 16, !dbg !62
1168   %vbptr.DerivedClass = bitcast i8* %0 to i32**, !dbg !62
1169   store i32* getelementptr inbounds ([2 x i32], [2 x i32]* @"\01??_8DerivedClass@@7B@", i32 0, i32 0), i32** %vbptr.DerivedClass, align 8, !dbg !62
1170   %1 = bitcast %struct.DerivedClass* %this1 to i8*, !dbg !62
1171   %2 = getelementptr inbounds i8, i8* %1, i64 32, !dbg !62
1172   %3 = bitcast i8* %2 to %class.Class*, !dbg !62
1173   br label %ctor.skip_vbases, !dbg !62
1175 ctor.skip_vbases:                                 ; preds = %ctor.init_vbases, %entry
1176   %4 = bitcast %struct.DerivedClass* %this1 to %struct.Struct*, !dbg !62
1177   %5 = load %struct.DerivedClass*, %struct.DerivedClass** %retval, align 8, !dbg !62
1178   ret %struct.DerivedClass* %5, !dbg !62
1181 attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
1182 attributes #1 = { nounwind readnone }
1183 attributes #2 = { inlinehint nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
1184 attributes #3 = { nounwind }
1186 !llvm.dbg.cu = !{!0}
1187 !llvm.module.flags = !{!3, !4, !5}
1188 !llvm.ident = !{!6}
1190 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.9.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
1191 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
1192 !2 = !{}
1193 !3 = !{i32 2, !"CodeView", i32 1}
1194 !4 = !{i32 2, !"Debug Info Version", i32 3}
1195 !5 = !{i32 1, !"PIC Level", i32 2}
1196 !6 = !{!"clang version 3.9.0 "}
1197 !7 = distinct !DISubprogram(name: "UseTypes", linkageName: "\01?UseTypes@@YAXXZ", scope: !1, file: !1, line: 26, type: !8, isLocal: false, isDefinition: true, scopeLine: 26, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
1198 !8 = !DISubroutineType(types: !9)
1199 !9 = !{null}
1200 !10 = !DILocalVariable(name: "s", scope: !7, file: !1, line: 27, type: !11)
1201 !11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Struct", file: !1, line: 1, size: 96, align: 32, elements: !12, identifier: ".?AUStruct@@")
1202 !12 = !{!13, !15, !16, !17}
1203 !13 = !DIDerivedType(tag: DW_TAG_member, name: "s1", scope: !11, file: !1, line: 2, baseType: !14, size: 32, align: 32)
1204 !14 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
1205 !15 = !DIDerivedType(tag: DW_TAG_member, name: "s2", scope: !11, file: !1, line: 3, baseType: !14, size: 32, align: 32, offset: 32)
1206 !16 = !DIDerivedType(tag: DW_TAG_member, name: "s3", scope: !11, file: !1, line: 4, baseType: !14, size: 32, align: 32, offset: 64)
1207 !17 = !DIDerivedType(tag: DW_TAG_member, name: "sdm", scope: !11, file: !1, line: 5, baseType: !18, flags: DIFlagStaticMember, extraData: i32 3)
1208 !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !14)
1209 !19 = !DIExpression()
1210 !20 = !DILocation(line: 27, column: 10, scope: !7)
1211 !21 = !DILocalVariable(name: "u", scope: !7, file: !1, line: 28, type: !22)
1212 !22 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "Union", file: !1, line: 7, size: 32, align: 32, elements: !23, identifier: ".?ATUnion@@")
1213 !23 = !{!24, !25}
1214 !24 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !22, file: !1, line: 8, baseType: !14, size: 32, align: 32)
1215 !25 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !22, file: !1, line: 9, baseType: !26, size: 32, align: 32)
1216 !26 = !DIBasicType(name: "float", size: 32, align: 32, encoding: DW_ATE_float)
1217 !27 = !DILocation(line: 28, column: 9, scope: !7)
1218 !28 = !DILocalVariable(name: "c", scope: !7, file: !1, line: 29, type: !29)
1219 !29 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "Class", file: !1, line: 11, size: 96, align: 32, elements: !30, identifier: ".?AVClass@@")
1220 !30 = !{!31, !32, !33}
1221 !31 = !DIDerivedType(tag: DW_TAG_member, name: "pub", scope: !29, file: !1, line: 13, baseType: !14, size: 32, align: 32, flags: DIFlagPublic)
1222 !32 = !DIDerivedType(tag: DW_TAG_member, name: "priv", scope: !29, file: !1, line: 16, baseType: !14, size: 32, align: 32, offset: 32)
1223 !33 = !DIDerivedType(tag: DW_TAG_member, name: "prot", scope: !29, file: !1, line: 18, baseType: !14, size: 32, align: 32, offset: 64, flags: DIFlagProtected)
1224 !34 = !DILocation(line: 29, column: 9, scope: !7)
1225 !35 = !DILocalVariable(name: "dc", scope: !7, file: !1, line: 30, type: !36)
1226 !36 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "DerivedClass", file: !1, line: 20, size: 384, align: 64, elements: !37, vtableHolder: !36, identifier: ".?AUDerivedClass@@")
1227 !37 = !{!38, !39, !40, !45}
1228 !38 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !36, baseType: !11)
1229 !39 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !36, baseType: !29, offset: 4, flags: DIFlagVirtual)
1230 !40 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$DerivedClass", scope: !1, file: !1, baseType: !41, size: 64, flags: DIFlagArtificial)
1231 !41 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !42, size: 64)
1232 !42 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "__vtbl_ptr_type", baseType: !43, size: 64)
1233 !43 = !DISubroutineType(types: !44)
1234 !44 = !{!14}
1235 !45 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !36, file: !1, line: 21, baseType: !14, size: 32, align: 32, offset: 192)
1236 !46 = !DILocation(line: 30, column: 16, scope: !7)
1237 !47 = !DILocalVariable(name: "n", scope: !7, file: !1, line: 31, type: !48)
1238 !48 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", scope: !29, file: !1, line: 23, size: 32, align: 32, elements: !49, identifier: ".?AUNested@Class@@")
1239 !49 = !{!50}
1240 !50 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !48, file: !1, line: 24, baseType: !14, size: 32, align: 32)
1241 !51 = !DILocation(line: 31, column: 17, scope: !7)
1242 !52 = !DILocation(line: 32, column: 1, scope: !7)
1243 !53 = distinct !DISubprogram(name: "DerivedClass::DerivedClass", linkageName: "\01??0DerivedClass@@QEAA@XZ", scope: !36, file: !1, line: 20, type: !54, isLocal: false, isDefinition: true, scopeLine: 20, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !57, retainedNodes: !2)
1244 !54 = !DISubroutineType(types: !55)
1245 !55 = !{null, !56}
1246 !56 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !36, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
1247 !57 = !DISubprogram(name: "DerivedClass::DerivedClass", scope: !36, type: !54, isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false)
1248 !58 = !DILocalVariable(name: "is_most_derived", arg: 2, scope: !53, type: !14, flags: DIFlagArtificial)
1249 !59 = !DILocation(line: 0, scope: !53)
1250 !60 = !DILocalVariable(name: "this", arg: 1, scope: !53, type: !61, flags: DIFlagArtificial | DIFlagObjectPointer)
1251 !61 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !36, size: 64, align: 64)
1252 !62 = !DILocation(line: 20, column: 8, scope: !53)