1; RUN: llc < %s -filetype=obj | llvm-readobj - -codeview | FileCheck %s 2 3; C++ source to regenerate: 4; $ cat t.cpp 5; struct Struct { 6; int s1; 7; int s2; 8; int s3; 9; static const int sdm = 3; 10; }; 11; union Union { 12; int a; 13; float b; 14; }; 15; class Class { 16; public: 17; int pub; 18; struct Nested; 19; private: 20; int priv; 21; protected: 22; int prot; 23; }; 24; struct DerivedClass : Struct, virtual Class { 25; int d; 26; }; 27; struct Class::Nested { 28; int n; 29; }; 30; void UseTypes() { 31; Struct s; 32; Union u; 33; Class c; 34; DerivedClass dc; 35; Class::Nested n; 36; } 37; $ clang t.cpp -S -emit-llvm -g -gcodeview -o t.ll 38 39; CHECK: CodeViewTypes [ 40; CHECK: Section: .debug$T (8) 41; CHECK: Magic: 0x4 42; CHECK: ArgList (0x1000) { 43; CHECK: TypeLeafKind: LF_ARGLIST (0x1201) 44; CHECK: NumArgs: 0 45; CHECK: Arguments [ 46; CHECK: ] 47; CHECK: } 48; CHECK: Procedure (0x1001) { 49; CHECK: TypeLeafKind: LF_PROCEDURE (0x1008) 50; CHECK: ReturnType: void (0x3) 51; CHECK: CallingConvention: NearC (0x0) 52; CHECK: FunctionOptions [ (0x0) 53; CHECK: ] 54; CHECK: NumParameters: 0 55; CHECK: ArgListType: () (0x1000) 56; CHECK: } 57; CHECK: FuncId (0x1002) { 58; CHECK: TypeLeafKind: LF_FUNC_ID (0x1601) 59; CHECK: ParentScope: 0x0 60; CHECK: FunctionType: void () (0x1001) 61; CHECK: Name: UseTypes 62; CHECK: } 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) 69; CHECK: ] 70; CHECK: FieldList: 0x0 71; CHECK: DerivedFrom: 0x0 72; CHECK: VShape: 0x0 73; CHECK: SizeOf: 0 74; CHECK: Name: Struct 75; CHECK: LinkageName: .?AUStruct@@ 76; CHECK: } 77; CHECK: Modifier (0x1004) { 78; CHECK: TypeLeafKind: LF_MODIFIER (0x1001) 79; CHECK: ModifiedType: int (0x74) 80; CHECK: Modifiers [ (0x1) 81; CHECK: Const (0x1) 82; CHECK: ] 83; CHECK: } 84; CHECK: FieldList (0x1005) { 85; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203) 86; CHECK: DataMember { 87; CHECK: AccessSpecifier: Public (0x3) 88; CHECK: Type: int (0x74) 89; CHECK: FieldOffset: 0x0 90; CHECK: Name: s1 91; CHECK: } 92; CHECK: DataMember { 93; CHECK: AccessSpecifier: Public (0x3) 94; CHECK: Type: int (0x74) 95; CHECK: FieldOffset: 0x4 96; CHECK: Name: s2 97; CHECK: } 98; CHECK: DataMember { 99; CHECK: AccessSpecifier: Public (0x3) 100; CHECK: Type: int (0x74) 101; CHECK: FieldOffset: 0x8 102; CHECK: Name: s3 103; CHECK: } 104; CHECK: StaticDataMember { 105; CHECK: AccessSpecifier: Public (0x3) 106; CHECK: Type: const int (0x1004) 107; CHECK: Name: sdm 108; CHECK: } 109; CHECK: } 110; CHECK: Struct (0x1006) { 111; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 112; CHECK: MemberCount: 4 113; CHECK: Properties [ (0x200) 114; CHECK: HasUniqueName (0x200) 115; CHECK: ] 116; CHECK: FieldList: <field list> (0x1005) 117; CHECK: DerivedFrom: 0x0 118; CHECK: VShape: 0x0 119; CHECK: SizeOf: 12 120; CHECK: Name: Struct 121; CHECK: LinkageName: .?AUStruct@@ 122; CHECK: } 123; CHECK: StringId (0x1007) { 124; CHECK: TypeLeafKind: LF_STRING_ID (0x1605) 125; CHECK: Id: 0x0 126; CHECK: StringData: D:\src\llvm\build\t.cpp 127; CHECK: } 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 133; CHECK: } 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) 140; CHECK: ] 141; CHECK: FieldList: 0x0 142; CHECK: SizeOf: 0 143; CHECK: Name: Union 144; CHECK: LinkageName: .?ATUnion@@ 145; CHECK: } 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 152; CHECK: Name: a 153; CHECK: } 154; CHECK: DataMember { 155; CHECK: AccessSpecifier: Public (0x3) 156; CHECK: Type: float (0x40) 157; CHECK: FieldOffset: 0x0 158; CHECK: Name: b 159; CHECK: } 160; CHECK: } 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) 167; CHECK: ] 168; CHECK: FieldList: <field list> (0x100A) 169; CHECK: SizeOf: 4 170; CHECK: Name: Union 171; CHECK: LinkageName: .?ATUnion@@ 172; CHECK: } 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 178; CHECK: } 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) 185; CHECK: ] 186; CHECK: FieldList: 0x0 187; CHECK: DerivedFrom: 0x0 188; CHECK: VShape: 0x0 189; CHECK: SizeOf: 0 190; CHECK: Name: Class 191; CHECK: LinkageName: .?AVClass@@ 192; CHECK: } 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 199; CHECK: Name: pub 200; CHECK: } 201; CHECK: DataMember { 202; CHECK: AccessSpecifier: Private (0x1) 203; CHECK: Type: int (0x74) 204; CHECK: FieldOffset: 0x4 205; CHECK: Name: priv 206; CHECK: } 207; CHECK: DataMember { 208; CHECK: AccessSpecifier: Protected (0x2) 209; CHECK: Type: int (0x74) 210; CHECK: FieldOffset: 0x8 211; CHECK: Name: prot 212; CHECK: } 213; CHECK: } 214; CHECK: Class (0x100F) { 215; CHECK: TypeLeafKind: LF_CLASS (0x1504) 216; CHECK: MemberCount: 3 217; CHECK: Properties [ (0x200) 218; CHECK: HasUniqueName (0x200) 219; CHECK: ] 220; CHECK: FieldList: <field list> (0x100E) 221; CHECK: DerivedFrom: 0x0 222; CHECK: VShape: 0x0 223; CHECK: SizeOf: 12 224; CHECK: Name: Class 225; CHECK: LinkageName: .?AVClass@@ 226; CHECK: } 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 232; CHECK: } 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) 239; CHECK: ] 240; CHECK: FieldList: 0x0 241; CHECK: DerivedFrom: 0x0 242; CHECK: VShape: 0x0 243; CHECK: SizeOf: 0 244; CHECK: Name: DerivedClass 245; CHECK: LinkageName: .?AUDerivedClass@@ 246; CHECK: } 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) 252; CHECK: IsFlat: 0 253; CHECK: IsConst: 0 254; CHECK: IsVolatile: 0 255; CHECK: IsUnaligned: 0 256; CHECK: SizeOf: 8 257; CHECK: } 258; CHECK: VFTableShape (0x1013) { 259; CHECK: TypeLeafKind: LF_VTSHAPE (0xA) 260; CHECK: VFEntryCount: 1 261; CHECK: } 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) 267; CHECK: IsFlat: 0 268; CHECK: IsConst: 0 269; CHECK: IsVolatile: 0 270; CHECK: IsUnaligned: 0 271; CHECK: SizeOf: 8 272; CHECK: } 273; CHECK: FieldList (0x1015) { 274; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203) 275; CHECK: BaseClass { 276; CHECK: AccessSpecifier: Public (0x3) 277; CHECK: BaseType: Struct (0x1003) 278; CHECK: BaseOffset: 0x0 279; CHECK: } 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 286; CHECK: } 287; CHECK: VFPtr { 288; CHECK: Type: <vftable 1 methods>* (0x1014) 289; CHECK: } 290; CHECK: DataMember { 291; CHECK: AccessSpecifier: Public (0x3) 292; CHECK: Type: int (0x74) 293; CHECK: FieldOffset: 0x18 294; CHECK: Name: d 295; CHECK: } 296; CHECK: } 297; CHECK: Struct (0x1016) { 298; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 299; CHECK: MemberCount: 4 300; CHECK: Properties [ (0x200) 301; CHECK: HasUniqueName (0x200) 302; CHECK: ] 303; CHECK: FieldList: <field list> (0x1015) 304; CHECK: DerivedFrom: 0x0 305; CHECK: VShape: 0x0 306; CHECK: SizeOf: 48 307; CHECK: Name: DerivedClass 308; CHECK: LinkageName: .?AUDerivedClass@@ 309; CHECK: } 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 315; CHECK: } 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) 323; CHECK: ] 324; CHECK: FieldList: 0x0 325; CHECK: DerivedFrom: 0x0 326; CHECK: VShape: 0x0 327; CHECK: SizeOf: 0 328; CHECK: Name: Class::Nested 329; CHECK: LinkageName: .?AUNested@Class@@ 330; CHECK: } 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 337; CHECK: Name: n 338; CHECK: } 339; CHECK: } 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) 346; CHECK: ] 347; CHECK: FieldList: <field list> (0x1019) 348; CHECK: DerivedFrom: 0x0 349; CHECK: VShape: 0x0 350; CHECK: SizeOf: 4 351; CHECK: Name: Class::Nested 352; CHECK: LinkageName: .?AUNested@Class@@ 353; CHECK: } 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 359; CHECK: } 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) 365; CHECK: IsFlat: 0 366; CHECK: IsConst: 1 367; CHECK: IsVolatile: 0 368; CHECK: IsUnaligned: 0 369; CHECK: SizeOf: 8 370; CHECK: } 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) 378; CHECK: ] 379; CHECK: NumParameters: 0 380; CHECK: ArgListType: () (0x1000) 381; CHECK: ThisAdjustment: 0 382; CHECK: } 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 388; CHECK: } 389; CHECK: ] 390 391; ModuleID = 't.cpp' 392source_filename = "t.cpp" 393target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" 394target triple = "x86_64-pc-windows-msvc19.0.23918" 395 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 } 401 402$"\01??0DerivedClass@@QEAA@XZ" = comdat any 403 404$"\01??_8DerivedClass@@7B@" = comdat any 405 406@"\01??_8DerivedClass@@7B@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 -16, i32 16], comdat 407 408; Function Attrs: nounwind uwtable 409define void @"\01?UseTypes@@YAXXZ"() #0 !dbg !7 { 410entry: 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 422 ret void, !dbg !52 423} 424 425; Function Attrs: nounwind readnone 426declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 427 428; Function Attrs: inlinehint nounwind uwtable 429define linkonce_odr %struct.DerivedClass* @"\01??0DerivedClass@@QEAA@XZ"(%struct.DerivedClass* returned %this, i32 %is_most_derived) unnamed_addr #2 comdat align 2 !dbg !53 { 430entry: 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 443 444ctor.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 453 454ctor.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 458} 459 460attributes #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" } 461attributes #1 = { nounwind readnone } 462attributes #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" } 463attributes #3 = { nounwind } 464 465!llvm.dbg.cu = !{!0} 466!llvm.module.flags = !{!3, !4, !5} 467!llvm.ident = !{!6} 468 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") 471!2 = !{} 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) 478!9 = !{null} 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@@") 492!23 = !{!24, !25} 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) 513!44 = !{!14} 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@@") 518!49 = !{!50} 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) 524!55 = !{null, !56} 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) 532