1 ; RUN: llc < %s -filetype=obj | llvm-readobj - -codeview | FileCheck %s
3 ; C++ source to regenerate:
9 ; static const int sdm = 3;
24 ; struct DerivedClass : Struct, virtual Class {
27 ; struct Class::Nested {
37 ; $ clang t.cpp -S -emit-llvm -g -gcodeview -o t.ll
39 ; CHECK: CodeViewTypes [
40 ; CHECK: Section: .debug$T (8)
42 ; CHECK: ArgList (0x1000) {
43 ; CHECK: TypeLeafKind: LF_ARGLIST (0x1201)
48 ; CHECK: Procedure (0x1001) {
49 ; CHECK: TypeLeafKind: LF_PROCEDURE (0x1008)
50 ; CHECK: ReturnType: void (0x3)
51 ; CHECK: CallingConvention: NearC (0x0)
52 ; CHECK: FunctionOptions [ (0x0)
54 ; CHECK: NumParameters: 0
55 ; CHECK: ArgListType: () (0x1000)
57 ; CHECK: FuncId (0x1002) {
58 ; CHECK: TypeLeafKind: LF_FUNC_ID (0x1601)
59 ; CHECK: ParentScope: 0x0
60 ; CHECK: FunctionType: void () (0x1001)
61 ; CHECK: Name: UseTypes
63 ; CHECK: Struct (0x1003) {
64 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
65 ; CHECK: MemberCount: 0
66 ; CHECK: Properties [ (0x280)
67 ; CHECK: ForwardReference (0x80)
68 ; CHECK: HasUniqueName (0x200)
70 ; CHECK: FieldList: 0x0
71 ; CHECK: DerivedFrom: 0x0
75 ; CHECK: LinkageName: .?AUStruct@@
77 ; CHECK: Modifier (0x1004) {
78 ; CHECK: TypeLeafKind: LF_MODIFIER (0x1001)
79 ; CHECK: ModifiedType: int (0x74)
80 ; CHECK: Modifiers [ (0x1)
84 ; CHECK: FieldList (0x1005) {
85 ; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)
87 ; CHECK: AccessSpecifier: Public (0x3)
88 ; CHECK: Type: int (0x74)
89 ; CHECK: FieldOffset: 0x0
93 ; CHECK: AccessSpecifier: Public (0x3)
94 ; CHECK: Type: int (0x74)
95 ; CHECK: FieldOffset: 0x4
99 ; CHECK: AccessSpecifier: Public (0x3)
100 ; CHECK: Type: int (0x74)
101 ; CHECK: FieldOffset: 0x8
104 ; CHECK: StaticDataMember {
105 ; CHECK: AccessSpecifier: Public (0x3)
106 ; CHECK: Type: const int (0x1004)
110 ; CHECK: Struct (0x1006) {
111 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
112 ; CHECK: MemberCount: 4
113 ; CHECK: Properties [ (0x200)
114 ; CHECK: HasUniqueName (0x200)
116 ; CHECK: FieldList: <field list> (0x1005)
117 ; CHECK: DerivedFrom: 0x0
120 ; CHECK: Name: Struct
121 ; CHECK: LinkageName: .?AUStruct@@
123 ; CHECK: StringId (0x1007) {
124 ; CHECK: TypeLeafKind: LF_STRING_ID (0x1605)
126 ; CHECK: StringData: D:\src\llvm\build\t.cpp
128 ; CHECK: UdtSourceLine (0x1008) {
129 ; CHECK: TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
130 ; CHECK: UDT: Struct (0x1006)
131 ; CHECK: SourceFile: D:\src\llvm\build\t.cpp (0x1007)
132 ; CHECK: LineNumber: 1
134 ; CHECK: Union (0x1009) {
135 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
136 ; CHECK: MemberCount: 0
137 ; CHECK: Properties [ (0x280)
138 ; CHECK: ForwardReference (0x80)
139 ; CHECK: HasUniqueName (0x200)
141 ; CHECK: FieldList: 0x0
144 ; CHECK: LinkageName: .?ATUnion@@
146 ; CHECK: FieldList (0x100A) {
147 ; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)
148 ; CHECK: DataMember {
149 ; CHECK: AccessSpecifier: Public (0x3)
150 ; CHECK: Type: int (0x74)
151 ; CHECK: FieldOffset: 0x0
154 ; CHECK: DataMember {
155 ; CHECK: AccessSpecifier: Public (0x3)
156 ; CHECK: Type: float (0x40)
157 ; CHECK: FieldOffset: 0x0
161 ; CHECK: Union (0x100B) {
162 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
163 ; CHECK: MemberCount: 2
164 ; CHECK: Properties [ (0x600)
165 ; CHECK: HasUniqueName (0x200)
166 ; CHECK: Sealed (0x400)
168 ; CHECK: FieldList: <field list> (0x100A)
171 ; CHECK: LinkageName: .?ATUnion@@
173 ; CHECK: UdtSourceLine (0x100C) {
174 ; CHECK: TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
175 ; CHECK: UDT: Union (0x100B)
176 ; CHECK: SourceFile: D:\src\llvm\build\t.cpp (0x1007)
177 ; CHECK: LineNumber: 7
179 ; CHECK: Class (0x100D) {
180 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
181 ; CHECK: MemberCount: 0
182 ; CHECK: Properties [ (0x280)
183 ; CHECK: ForwardReference (0x80)
184 ; CHECK: HasUniqueName (0x200)
186 ; CHECK: FieldList: 0x0
187 ; CHECK: DerivedFrom: 0x0
191 ; CHECK: LinkageName: .?AVClass@@
193 ; CHECK: FieldList (0x100E) {
194 ; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)
195 ; CHECK: DataMember {
196 ; CHECK: AccessSpecifier: Public (0x3)
197 ; CHECK: Type: int (0x74)
198 ; CHECK: FieldOffset: 0x0
201 ; CHECK: DataMember {
202 ; CHECK: AccessSpecifier: Private (0x1)
203 ; CHECK: Type: int (0x74)
204 ; CHECK: FieldOffset: 0x4
207 ; CHECK: DataMember {
208 ; CHECK: AccessSpecifier: Protected (0x2)
209 ; CHECK: Type: int (0x74)
210 ; CHECK: FieldOffset: 0x8
214 ; CHECK: Class (0x100F) {
215 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
216 ; CHECK: MemberCount: 3
217 ; CHECK: Properties [ (0x200)
218 ; CHECK: HasUniqueName (0x200)
220 ; CHECK: FieldList: <field list> (0x100E)
221 ; CHECK: DerivedFrom: 0x0
225 ; CHECK: LinkageName: .?AVClass@@
227 ; CHECK: UdtSourceLine (0x1010) {
228 ; CHECK: TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
229 ; CHECK: UDT: Class (0x100F)
230 ; CHECK: SourceFile: D:\src\llvm\build\t.cpp (0x1007)
231 ; CHECK: LineNumber: 11
233 ; CHECK: Struct (0x1011) {
234 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
235 ; CHECK: MemberCount: 0
236 ; CHECK: Properties [ (0x280)
237 ; CHECK: ForwardReference (0x80)
238 ; CHECK: HasUniqueName (0x200)
240 ; CHECK: FieldList: 0x0
241 ; CHECK: DerivedFrom: 0x0
244 ; CHECK: Name: DerivedClass
245 ; CHECK: LinkageName: .?AUDerivedClass@@
247 ; CHECK: Pointer (0x1012) {
248 ; CHECK: TypeLeafKind: LF_POINTER (0x1002)
249 ; CHECK: PointeeType: const int (0x1004)
250 ; CHECK: PtrType: Near64 (0xC)
251 ; CHECK: PtrMode: Pointer (0x0)
254 ; CHECK: IsVolatile: 0
255 ; CHECK: IsUnaligned: 0
258 ; CHECK: VFTableShape (0x1013) {
259 ; CHECK: TypeLeafKind: LF_VTSHAPE (0xA)
260 ; CHECK: VFEntryCount: 1
262 ; CHECK: Pointer (0x1014) {
263 ; CHECK: TypeLeafKind: LF_POINTER (0x1002)
264 ; CHECK: PointeeType: <vftable 1 methods> (0x1013)
265 ; CHECK: PtrType: Near64 (0xC)
266 ; CHECK: PtrMode: Pointer (0x0)
269 ; CHECK: IsVolatile: 0
270 ; CHECK: IsUnaligned: 0
273 ; CHECK: FieldList (0x1015) {
274 ; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)
276 ; CHECK: AccessSpecifier: Public (0x3)
277 ; CHECK: BaseType: Struct (0x1003)
278 ; CHECK: BaseOffset: 0x0
280 ; CHECK: VirtualBaseClass {
281 ; CHECK: AccessSpecifier: Public (0x3)
282 ; CHECK: BaseType: Class (0x100D)
283 ; CHECK: VBPtrType: const int* (0x1012)
284 ; CHECK: VBPtrOffset: 0x0
285 ; CHECK: VBTableIndex: 0x1
288 ; CHECK: Type: <vftable 1 methods>* (0x1014)
290 ; CHECK: DataMember {
291 ; CHECK: AccessSpecifier: Public (0x3)
292 ; CHECK: Type: int (0x74)
293 ; CHECK: FieldOffset: 0x18
297 ; CHECK: Struct (0x1016) {
298 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
299 ; CHECK: MemberCount: 4
300 ; CHECK: Properties [ (0x200)
301 ; CHECK: HasUniqueName (0x200)
303 ; CHECK: FieldList: <field list> (0x1015)
304 ; CHECK: DerivedFrom: 0x0
307 ; CHECK: Name: DerivedClass
308 ; CHECK: LinkageName: .?AUDerivedClass@@
310 ; CHECK: UdtSourceLine (0x1017) {
311 ; CHECK: TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
312 ; CHECK: UDT: DerivedClass (0x1016)
313 ; CHECK: SourceFile: D:\src\llvm\build\t.cpp (0x1007)
314 ; CHECK: LineNumber: 20
316 ; CHECK: Struct (0x1018) {
317 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
318 ; CHECK: MemberCount: 0
319 ; CHECK: Properties [ (0x288)
320 ; CHECK: ForwardReference (0x80)
321 ; CHECK: HasUniqueName (0x200)
322 ; CHECK: Nested (0x8)
324 ; CHECK: FieldList: 0x0
325 ; CHECK: DerivedFrom: 0x0
328 ; CHECK: Name: Class::Nested
329 ; CHECK: LinkageName: .?AUNested@Class@@
331 ; CHECK: FieldList (0x1019) {
332 ; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)
333 ; CHECK: DataMember {
334 ; CHECK: AccessSpecifier: Public (0x3)
335 ; CHECK: Type: int (0x74)
336 ; CHECK: FieldOffset: 0x0
340 ; CHECK: Struct (0x101A) {
341 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
342 ; CHECK: MemberCount: 1
343 ; CHECK: Properties [ (0x208)
344 ; CHECK: HasUniqueName (0x200)
345 ; CHECK: Nested (0x8)
347 ; CHECK: FieldList: <field list> (0x1019)
348 ; CHECK: DerivedFrom: 0x0
351 ; CHECK: Name: Class::Nested
352 ; CHECK: LinkageName: .?AUNested@Class@@
354 ; CHECK: UdtSourceLine (0x101B) {
355 ; CHECK: TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
356 ; CHECK: UDT: Class::Nested (0x101A)
357 ; CHECK: SourceFile: D:\src\llvm\build\t.cpp (0x1007)
358 ; CHECK: LineNumber: 23
360 ; CHECK: Pointer (0x101C) {
361 ; CHECK: TypeLeafKind: LF_POINTER (0x1002)
362 ; CHECK: PointeeType: DerivedClass (0x1011)
363 ; CHECK: PtrType: Near64 (0xC)
364 ; CHECK: PtrMode: Pointer (0x0)
367 ; CHECK: IsVolatile: 0
368 ; CHECK: IsUnaligned: 0
371 ; CHECK: MemberFunction (0x101D) {
372 ; CHECK: TypeLeafKind: LF_MFUNCTION (0x1009)
373 ; CHECK: ReturnType: void (0x3)
374 ; CHECK: ClassType: DerivedClass (0x1011)
375 ; CHECK: ThisType: DerivedClass* const (0x101C)
376 ; CHECK: CallingConvention: NearC (0x0)
377 ; CHECK: FunctionOptions [ (0x0)
379 ; CHECK: NumParameters: 0
380 ; CHECK: ArgListType: () (0x1000)
381 ; CHECK: ThisAdjustment: 0
383 ; CHECK: MemberFuncId (0x101E) {
384 ; CHECK: TypeLeafKind: LF_MFUNC_ID (0x1602)
385 ; CHECK: ClassType: DerivedClass (0x1011)
386 ; CHECK: FunctionType: void DerivedClass::() (0x101D)
387 ; CHECK: Name: DerivedClass::DerivedClass
392 source_filename = "t.cpp"
393 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
394 target triple = "x86_64-pc-windows-msvc19.0.23918"
396 %struct.Struct = type { i32, i32, i32 }
397 %union.Union = type { i32 }
398 %class.Class = type { i32, i32, i32 }
399 %struct.DerivedClass = type { %struct.Struct, i32*, i32, [4 x i8], %class.Class }
400 %"struct.Class::Nested" = type { i32 }
402 $"\01??0DerivedClass@@QEAA@XZ" = comdat any
404 $"\01??_8DerivedClass@@7B@" = comdat any
406 @"\01??_8DerivedClass@@7B@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 -16, i32 16], comdat
408 ; Function Attrs: nounwind uwtable
409 define void @"\01?UseTypes@@YAXXZ"() #0 !dbg !7 {
411 %s = alloca %struct.Struct, align 4
412 %u = alloca %union.Union, align 4
413 %c = alloca %class.Class, align 4
414 %dc = alloca %struct.DerivedClass, align 8
415 %n = alloca %"struct.Class::Nested", align 4
416 call void @llvm.dbg.declare(metadata %struct.Struct* %s, metadata !10, metadata !19), !dbg !20
417 call void @llvm.dbg.declare(metadata %union.Union* %u, metadata !21, metadata !19), !dbg !27
418 call void @llvm.dbg.declare(metadata %class.Class* %c, metadata !28, metadata !19), !dbg !34
419 call void @llvm.dbg.declare(metadata %struct.DerivedClass* %dc, metadata !35, metadata !19), !dbg !46
420 %call = call %struct.DerivedClass* @"\01??0DerivedClass@@QEAA@XZ"(%struct.DerivedClass* %dc, i32 1) #3, !dbg !46
421 call void @llvm.dbg.declare(metadata %"struct.Class::Nested"* %n, metadata !47, metadata !19), !dbg !51
425 ; Function Attrs: nounwind readnone
426 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
428 ; Function Attrs: inlinehint nounwind uwtable
429 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 {
431 %retval = alloca %struct.DerivedClass*, align 8
432 %is_most_derived.addr = alloca i32, align 4
433 %this.addr = alloca %struct.DerivedClass*, align 8
434 store i32 %is_most_derived, i32* %is_most_derived.addr, align 4
435 call void @llvm.dbg.declare(metadata i32* %is_most_derived.addr, metadata !58, metadata !19), !dbg !59
436 store %struct.DerivedClass* %this, %struct.DerivedClass** %this.addr, align 8
437 call void @llvm.dbg.declare(metadata %struct.DerivedClass** %this.addr, metadata !60, metadata !19), !dbg !59
438 %this1 = load %struct.DerivedClass*, %struct.DerivedClass** %this.addr, align 8
439 store %struct.DerivedClass* %this1, %struct.DerivedClass** %retval, align 8
440 %is_most_derived2 = load i32, i32* %is_most_derived.addr, align 4
441 %is_complete_object = icmp ne i32 %is_most_derived2, 0, !dbg !62
442 br i1 %is_complete_object, label %ctor.init_vbases, label %ctor.skip_vbases, !dbg !62
444 ctor.init_vbases: ; preds = %entry
445 %this.int8 = bitcast %struct.DerivedClass* %this1 to i8*, !dbg !62
446 %0 = getelementptr inbounds i8, i8* %this.int8, i64 16, !dbg !62
447 %vbptr.DerivedClass = bitcast i8* %0 to i32**, !dbg !62
448 store i32* getelementptr inbounds ([2 x i32], [2 x i32]* @"\01??_8DerivedClass@@7B@", i32 0, i32 0), i32** %vbptr.DerivedClass, align 8, !dbg !62
449 %1 = bitcast %struct.DerivedClass* %this1 to i8*, !dbg !62
450 %2 = getelementptr inbounds i8, i8* %1, i64 32, !dbg !62
451 %3 = bitcast i8* %2 to %class.Class*, !dbg !62
452 br label %ctor.skip_vbases, !dbg !62
454 ctor.skip_vbases: ; preds = %ctor.init_vbases, %entry
455 %4 = bitcast %struct.DerivedClass* %this1 to %struct.Struct*, !dbg !62
456 %5 = load %struct.DerivedClass*, %struct.DerivedClass** %retval, align 8, !dbg !62
457 ret %struct.DerivedClass* %5, !dbg !62
460 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" }
461 attributes #1 = { nounwind readnone }
462 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" }
463 attributes #3 = { nounwind }
466 !llvm.module.flags = !{!3, !4, !5}
469 !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)
470 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
472 !3 = !{i32 2, !"CodeView", i32 1}
473 !4 = !{i32 2, !"Debug Info Version", i32 3}
474 !5 = !{i32 1, !"PIC Level", i32 2}
475 !6 = !{!"clang version 3.9.0 "}
476 !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)
477 !8 = !DISubroutineType(types: !9)
479 !10 = !DILocalVariable(name: "s", scope: !7, file: !1, line: 27, type: !11)
480 !11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Struct", file: !1, line: 1, size: 96, align: 32, elements: !12, identifier: ".?AUStruct@@")
481 !12 = !{!13, !15, !16, !17}
482 !13 = !DIDerivedType(tag: DW_TAG_member, name: "s1", scope: !11, file: !1, line: 2, baseType: !14, size: 32, align: 32)
483 !14 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
484 !15 = !DIDerivedType(tag: DW_TAG_member, name: "s2", scope: !11, file: !1, line: 3, baseType: !14, size: 32, align: 32, offset: 32)
485 !16 = !DIDerivedType(tag: DW_TAG_member, name: "s3", scope: !11, file: !1, line: 4, baseType: !14, size: 32, align: 32, offset: 64)
486 !17 = !DIDerivedType(tag: DW_TAG_member, name: "sdm", scope: !11, file: !1, line: 5, baseType: !18, flags: DIFlagStaticMember, extraData: i32 3)
487 !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !14)
488 !19 = !DIExpression()
489 !20 = !DILocation(line: 27, column: 10, scope: !7)
490 !21 = !DILocalVariable(name: "u", scope: !7, file: !1, line: 28, type: !22)
491 !22 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "Union", file: !1, line: 7, size: 32, align: 32, elements: !23, identifier: ".?ATUnion@@")
493 !24 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !22, file: !1, line: 8, baseType: !14, size: 32, align: 32)
494 !25 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !22, file: !1, line: 9, baseType: !26, size: 32, align: 32)
495 !26 = !DIBasicType(name: "float", size: 32, align: 32, encoding: DW_ATE_float)
496 !27 = !DILocation(line: 28, column: 9, scope: !7)
497 !28 = !DILocalVariable(name: "c", scope: !7, file: !1, line: 29, type: !29)
498 !29 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "Class", file: !1, line: 11, size: 96, align: 32, elements: !30, identifier: ".?AVClass@@")
499 !30 = !{!31, !32, !33}
500 !31 = !DIDerivedType(tag: DW_TAG_member, name: "pub", scope: !29, file: !1, line: 13, baseType: !14, size: 32, align: 32, flags: DIFlagPublic)
501 !32 = !DIDerivedType(tag: DW_TAG_member, name: "priv", scope: !29, file: !1, line: 16, baseType: !14, size: 32, align: 32, offset: 32)
502 !33 = !DIDerivedType(tag: DW_TAG_member, name: "prot", scope: !29, file: !1, line: 18, baseType: !14, size: 32, align: 32, offset: 64, flags: DIFlagProtected)
503 !34 = !DILocation(line: 29, column: 9, scope: !7)
504 !35 = !DILocalVariable(name: "dc", scope: !7, file: !1, line: 30, type: !36)
505 !36 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "DerivedClass", file: !1, line: 20, size: 384, align: 64, elements: !37, vtableHolder: !36, identifier: ".?AUDerivedClass@@")
506 !37 = !{!38, !39, !40, !45}
507 !38 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !36, baseType: !11)
508 !39 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !36, baseType: !29, offset: 4, flags: DIFlagVirtual)
509 !40 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$DerivedClass", scope: !1, file: !1, baseType: !41, size: 64, flags: DIFlagArtificial)
510 !41 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !42, size: 64)
511 !42 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "__vtbl_ptr_type", baseType: !43, size: 64)
512 !43 = !DISubroutineType(types: !44)
514 !45 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !36, file: !1, line: 21, baseType: !14, size: 32, align: 32, offset: 192)
515 !46 = !DILocation(line: 30, column: 16, scope: !7)
516 !47 = !DILocalVariable(name: "n", scope: !7, file: !1, line: 31, type: !48)
517 !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@@")
519 !50 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !48, file: !1, line: 24, baseType: !14, size: 32, align: 32)
520 !51 = !DILocation(line: 31, column: 17, scope: !7)
521 !52 = !DILocation(line: 32, column: 1, scope: !7)
522 !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)
523 !54 = !DISubroutineType(types: !55)
525 !56 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !36, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
526 !57 = !DISubprogram(name: "DerivedClass::DerivedClass", scope: !36, type: !54, isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false)
527 !58 = !DILocalVariable(name: "is_most_derived", arg: 2, scope: !53, type: !14, flags: DIFlagArtificial)
528 !59 = !DILocation(line: 0, scope: !53)
529 !60 = !DILocalVariable(name: "this", arg: 1, scope: !53, type: !61, flags: DIFlagArtificial | DIFlagObjectPointer)
530 !61 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !36, size: 64, align: 64)
531 !62 = !DILocation(line: 20, column: 8, scope: !53)