1; RUN: llc -split-dwarf-file=foo.dwo -O0 %s -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t 2; RUN: llvm-dwarfdump -debug-info %t | FileCheck %s --check-prefix=CHECK-DWO 3; RUN: llc --try-experimental-debuginfo-iterators -split-dwarf-file=foo.dwo -O0 %s -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t 4; RUN: llvm-dwarfdump -debug-info %t | FileCheck %s --check-prefix=CHECK-DWO 5 6; Based on the debuginfo-tests/sret.cpp code. 7 8; CHECK-DWO: DW_AT_GNU_dwo_id (0x044dcdf3d75b11a1) 9; CHECK-DWO: DW_AT_GNU_dwo_id (0x044dcdf3d75b11a1) 10 11; RUN: llc -O0 -fast-isel=true -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,FASTISEL %s 12; RUN: llc -O0 -fast-isel=false -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,SDAG %s 13 14; RUN: llc --try-experimental-debuginfo-iterators -O0 -fast-isel=true -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,FASTISEL %s 15; RUN: llc --try-experimental-debuginfo-iterators -O0 -fast-isel=false -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,SDAG %s 16 17; CHECK: _ZN1B9AInstanceEv 18; CHECK: DW_TAG_variable 19; CHECK-NEXT: DW_AT_location (0x00000000 20; FASTISEL-NEXT: [{{.*}}, {{.*}}): DW_OP_breg6 RBP-32, DW_OP_deref 21; FASTISEL-NEXT: [{{.*}}, {{.*}}): DW_OP_breg5 RDI+0 22; FASTISEL-NEXT: [{{.*}}, {{.*}}): DW_OP_breg6 RBP-32, DW_OP_deref) 23; SDAG-NEXT: [{{.*}}, {{.*}}): DW_OP_breg5 RDI+0 24; SDAG-NEXT: [{{.*}}, {{.*}}): DW_OP_breg6 RBP-32, DW_OP_deref) 25; CHECK-NEXT: DW_AT_name {{.*}}"a" 26 27%class.A = type { ptr, i32 } 28%class.B = type { i8 } 29 30@_ZTV1A = linkonce_odr unnamed_addr constant [4 x ptr] [ptr null, ptr @_ZTI1A, ptr @_ZN1AD2Ev, ptr @_ZN1AD0Ev] 31@_ZTVN10__cxxabiv117__class_type_infoE = external global ptr 32@_ZTS1A = linkonce_odr constant [3 x i8] c"1A\00" 33@_ZTI1A = linkonce_odr constant { ptr, ptr } { ptr getelementptr inbounds (ptr, ptr @_ZTVN10__cxxabiv117__class_type_infoE, i64 2), ptr @_ZTS1A } 34 35@_ZN1AC1Ei = alias void (ptr, i32), ptr @_ZN1AC2Ei 36@_ZN1AC1ERKS_ = alias void (ptr, ptr), ptr @_ZN1AC2ERKS_ 37 38; Function Attrs: nounwind uwtable 39define void @_ZN1AC2Ei(ptr %this, i32 %i) unnamed_addr #0 align 2 !dbg !49 { 40entry: 41 %this.addr = alloca ptr, align 8 42 %i.addr = alloca i32, align 4 43 store ptr %this, ptr %this.addr, align 8 44 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !67, metadata !DIExpression()), !dbg !69 45 store i32 %i, ptr %i.addr, align 4 46 call void @llvm.dbg.declare(metadata ptr %i.addr, metadata !70, metadata !DIExpression()), !dbg !71 47 %this1 = load ptr, ptr %this.addr 48 store ptr getelementptr inbounds ([4 x ptr], ptr @_ZTV1A, i64 0, i64 2), ptr %this1, !dbg !72 49 %m_int = getelementptr inbounds %class.A, ptr %this1, i32 0, i32 1, !dbg !72 50 %0 = load i32, ptr %i.addr, align 4, !dbg !72 51 store i32 %0, ptr %m_int, align 4, !dbg !72 52 ret void, !dbg !73 53} 54 55; Function Attrs: nounwind readnone 56declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 57 58; Function Attrs: nounwind uwtable 59define void @_ZN1AC2ERKS_(ptr %this, ptr %rhs) unnamed_addr #0 align 2 !dbg !50 { 60entry: 61 %this.addr = alloca ptr, align 8 62 %rhs.addr = alloca ptr, align 8 63 store ptr %this, ptr %this.addr, align 8 64 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !74, metadata !DIExpression()), !dbg !75 65 store ptr %rhs, ptr %rhs.addr, align 8 66 call void @llvm.dbg.declare(metadata ptr %rhs.addr, metadata !76, metadata !DIExpression()), !dbg !77 67 %this1 = load ptr, ptr %this.addr 68 store ptr getelementptr inbounds ([4 x ptr], ptr @_ZTV1A, i64 0, i64 2), ptr %this1, !dbg !78 69 %m_int = getelementptr inbounds %class.A, ptr %this1, i32 0, i32 1, !dbg !78 70 %0 = load ptr, ptr %rhs.addr, align 8, !dbg !78 71 %m_int2 = getelementptr inbounds %class.A, ptr %0, i32 0, i32 1, !dbg !78 72 %1 = load i32, ptr %m_int2, align 4, !dbg !78 73 store i32 %1, ptr %m_int, align 4, !dbg !78 74 ret void, !dbg !79 75} 76 77; Function Attrs: nounwind uwtable 78define ptr @_ZN1AaSERKS_(ptr %this, ptr %rhs) #0 align 2 !dbg !51 { 79entry: 80 %this.addr = alloca ptr, align 8 81 %rhs.addr = alloca ptr, align 8 82 store ptr %this, ptr %this.addr, align 8 83 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !80, metadata !DIExpression()), !dbg !81 84 store ptr %rhs, ptr %rhs.addr, align 8 85 call void @llvm.dbg.declare(metadata ptr %rhs.addr, metadata !82, metadata !DIExpression()), !dbg !83 86 %this1 = load ptr, ptr %this.addr 87 %0 = load ptr, ptr %rhs.addr, align 8, !dbg !84 88 %m_int = getelementptr inbounds %class.A, ptr %0, i32 0, i32 1, !dbg !84 89 %1 = load i32, ptr %m_int, align 4, !dbg !84 90 %m_int2 = getelementptr inbounds %class.A, ptr %this1, i32 0, i32 1, !dbg !84 91 store i32 %1, ptr %m_int2, align 4, !dbg !84 92 ret ptr %this1, !dbg !85 93} 94 95; Function Attrs: nounwind uwtable 96define i32 @_ZN1A7get_intEv(ptr %this) #0 align 2 !dbg !52 { 97entry: 98 %this.addr = alloca ptr, align 8 99 store ptr %this, ptr %this.addr, align 8 100 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !86, metadata !DIExpression()), !dbg !87 101 %this1 = load ptr, ptr %this.addr 102 %m_int = getelementptr inbounds %class.A, ptr %this1, i32 0, i32 1, !dbg !88 103 %0 = load i32, ptr %m_int, align 4, !dbg !88 104 ret i32 %0, !dbg !88 105} 106 107; Function Attrs: uwtable 108define void @_ZN1B9AInstanceEv(ptr noalias sret(%class.A) %agg.result, ptr %this) #2 align 2 !dbg !53 { 109entry: 110 %this.addr = alloca ptr, align 8 111 %nrvo = alloca i1, align 1 112 %cleanup.dest.slot = alloca i32 113 store ptr %this, ptr %this.addr, align 8 114 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !89, metadata !DIExpression()), !dbg !91 115 %this1 = load ptr, ptr %this.addr 116 store i1 false, ptr %nrvo, !dbg !92 117 call void @llvm.dbg.declare(metadata ptr %agg.result, metadata !93, metadata !DIExpression()), !dbg !92 118 call void @_ZN1AC1Ei(ptr %agg.result, i32 12), !dbg !92 119 store i1 true, ptr %nrvo, !dbg !94 120 store i32 1, ptr %cleanup.dest.slot 121 %nrvo.val = load i1, ptr %nrvo, !dbg !95 122 br i1 %nrvo.val, label %nrvo.skipdtor, label %nrvo.unused, !dbg !95 123 124nrvo.unused: ; preds = %entry 125 call void @_ZN1AD2Ev(ptr %agg.result), !dbg !96 126 br label %nrvo.skipdtor, !dbg !96 127 128nrvo.skipdtor: ; preds = %nrvo.unused, %entry 129 ret void, !dbg !98 130} 131 132; Function Attrs: nounwind uwtable 133define linkonce_odr void @_ZN1AD2Ev(ptr %this) unnamed_addr #0 align 2 !dbg !63 { 134entry: 135 %this.addr = alloca ptr, align 8 136 store ptr %this, ptr %this.addr, align 8 137 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !101, metadata !DIExpression()), !dbg !102 138 %this1 = load ptr, ptr %this.addr 139 ret void, !dbg !103 140} 141 142; Function Attrs: uwtable 143define i32 @main(i32 %argc, ptr %argv) #2 personality ptr @__gxx_personality_v0 !dbg !54 { 144entry: 145 %retval = alloca i32, align 4 146 %argc.addr = alloca i32, align 4 147 %argv.addr = alloca ptr, align 8 148 %b = alloca %class.B, align 8 149 %return_val = alloca i32, align 4 150 %temp.lvalue = alloca %class.A, align 8 151 %exn.slot = alloca ptr 152 %ehselector.slot = alloca i32 153 %a = alloca %class.A, align 8 154 %cleanup.dest.slot = alloca i32 155 store i32 0, ptr %retval 156 store i32 %argc, ptr %argc.addr, align 4 157 call void @llvm.dbg.declare(metadata ptr %argc.addr, metadata !104, metadata !DIExpression()), !dbg !105 158 store ptr %argv, ptr %argv.addr, align 8 159 call void @llvm.dbg.declare(metadata ptr %argv.addr, metadata !106, metadata !DIExpression()), !dbg !105 160 call void @llvm.dbg.declare(metadata ptr %b, metadata !107, metadata !DIExpression()), !dbg !108 161 call void @_ZN1BC2Ev(ptr %b), !dbg !108 162 call void @llvm.dbg.declare(metadata ptr %return_val, metadata !109, metadata !DIExpression()), !dbg !110 163 call void @_ZN1B9AInstanceEv(ptr sret(%class.A) %temp.lvalue, ptr %b), !dbg !110 164 %call = invoke i32 @_ZN1A7get_intEv(ptr %temp.lvalue) 165 to label %invoke.cont unwind label %lpad, !dbg !110 166 167invoke.cont: ; preds = %entry 168 call void @_ZN1AD2Ev(ptr %temp.lvalue), !dbg !111 169 store i32 %call, ptr %return_val, align 4, !dbg !111 170 call void @llvm.dbg.declare(metadata ptr %a, metadata !113, metadata !DIExpression()), !dbg !114 171 call void @_ZN1B9AInstanceEv(ptr sret(%class.A) %a, ptr %b), !dbg !114 172 %0 = load i32, ptr %return_val, align 4, !dbg !115 173 store i32 %0, ptr %retval, !dbg !115 174 store i32 1, ptr %cleanup.dest.slot 175 call void @_ZN1AD2Ev(ptr %a), !dbg !116 176 %1 = load i32, ptr %retval, !dbg !116 177 ret i32 %1, !dbg !116 178 179lpad: ; preds = %entry 180 %2 = landingpad { ptr, i32 } 181 cleanup, !dbg !116 182 %3 = extractvalue { ptr, i32 } %2, 0, !dbg !116 183 store ptr %3, ptr %exn.slot, !dbg !116 184 %4 = extractvalue { ptr, i32 } %2, 1, !dbg !116 185 store i32 %4, ptr %ehselector.slot, !dbg !116 186 invoke void @_ZN1AD2Ev(ptr %temp.lvalue) 187 to label %invoke.cont1 unwind label %terminate.lpad, !dbg !116 188 189invoke.cont1: ; preds = %lpad 190 br label %eh.resume, !dbg !117 191 192eh.resume: ; preds = %invoke.cont1 193 %exn = load ptr, ptr %exn.slot, !dbg !119 194 %sel = load i32, ptr %ehselector.slot, !dbg !119 195 %lpad.val = insertvalue { ptr, i32 } undef, ptr %exn, 0, !dbg !119 196 %lpad.val2 = insertvalue { ptr, i32 } %lpad.val, i32 %sel, 1, !dbg !119 197 resume { ptr, i32 } %lpad.val2, !dbg !119 198 199terminate.lpad: ; preds = %lpad 200 %5 = landingpad { ptr, i32 } 201 catch ptr null, !dbg !121 202 %6 = extractvalue { ptr, i32 } %5, 0, !dbg !121 203 call void @__clang_call_terminate(ptr %6) #5, !dbg !121 204 unreachable, !dbg !121 205} 206 207; Function Attrs: nounwind uwtable 208define linkonce_odr void @_ZN1BC2Ev(ptr %this) unnamed_addr #0 align 2 !dbg !62 { 209entry: 210 %this.addr = alloca ptr, align 8 211 store ptr %this, ptr %this.addr, align 8 212 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !123, metadata !DIExpression()), !dbg !124 213 %this1 = load ptr, ptr %this.addr 214 ret void, !dbg !125 215} 216 217declare i32 @__gxx_personality_v0(...) 218 219; Function Attrs: noinline noreturn nounwind 220define linkonce_odr hidden void @__clang_call_terminate(ptr) #3 { 221 %2 = call ptr @__cxa_begin_catch(ptr %0) #6 222 call void @_ZSt9terminatev() #5 223 unreachable 224} 225 226declare ptr @__cxa_begin_catch(ptr) 227 228declare void @_ZSt9terminatev() 229 230; Function Attrs: uwtable 231define linkonce_odr void @_ZN1AD0Ev(ptr %this) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 !dbg !61 { 232entry: 233 %this.addr = alloca ptr, align 8 234 %exn.slot = alloca ptr 235 %ehselector.slot = alloca i32, align 4 236 store ptr %this, ptr %this.addr, align 8 237 call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !126, metadata !DIExpression()), !dbg !127 238 %this1 = load ptr, ptr %this.addr 239 invoke void @_ZN1AD2Ev(ptr %this1) 240 to label %invoke.cont unwind label %lpad, !dbg !128 241 242invoke.cont: ; preds = %entry 243 call void @_ZdlPv(ptr %this1) #7, !dbg !129 244 ret void, !dbg !129 245 246lpad: ; preds = %entry 247 %0 = landingpad { ptr, i32 } 248 cleanup, !dbg !131 249 %1 = extractvalue { ptr, i32 } %0, 0, !dbg !131 250 store ptr %1, ptr %exn.slot, !dbg !131 251 %2 = extractvalue { ptr, i32 } %0, 1, !dbg !131 252 store i32 %2, ptr %ehselector.slot, !dbg !131 253 call void @_ZdlPv(ptr %this1) #7, !dbg !131 254 br label %eh.resume, !dbg !131 255 256eh.resume: ; preds = %lpad 257 %exn = load ptr, ptr %exn.slot, !dbg !133 258 %sel = load i32, ptr %ehselector.slot, !dbg !133 259 %lpad.val = insertvalue { ptr, i32 } undef, ptr %exn, 0, !dbg !133 260 %lpad.val2 = insertvalue { ptr, i32 } %lpad.val, i32 %sel, 1, !dbg !133 261 resume { ptr, i32 } %lpad.val2, !dbg !133 262} 263 264; Function Attrs: nobuiltin nounwind 265declare void @_ZdlPv(ptr) #4 266 267attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 268attributes #1 = { nounwind readnone } 269attributes #2 = { uwtable "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 270attributes #3 = { noinline noreturn nounwind } 271attributes #4 = { nobuiltin nounwind "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 272attributes #5 = { noreturn nounwind } 273attributes #6 = { nounwind } 274attributes #7 = { builtin nounwind } 275 276!llvm.dbg.cu = !{!0} 277!llvm.module.flags = !{!64, !65} 278!llvm.ident = !{!66} 279 280!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 (trunk 203283) (llvm/trunk 203307)", isOptimized: false, splitDebugFilename: "sret.dwo", emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !3, globals: !2, imports: !2) 281!1 = !DIFile(filename: "sret.cpp", directory: "/usr/local/google/home/echristo/tmp") 282!2 = !{} 283!3 = !{!4, !37} 284!4 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, size: 128, align: 64, file: !1, elements: !5, vtableHolder: !4, identifier: "_ZTS1A") 285!5 = !{!6, !13, !14, !19, !25, !29, !33} 286!6 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$A", size: 64, flags: DIFlagArtificial, file: !1, scope: !7, baseType: !8) 287!7 = !DIFile(filename: "sret.cpp", directory: "/usr/local/google/home/echristo/tmp") 288!8 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, baseType: !9) 289!9 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "__vtbl_ptr_type", size: 64, baseType: !10) 290!10 = !DISubroutineType(types: !11) 291!11 = !{!12} 292!12 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) 293!13 = !DIDerivedType(tag: DW_TAG_member, name: "m_int", line: 13, size: 32, align: 32, offset: 64, flags: DIFlagProtected, file: !1, scope: !4, baseType: !12) 294!14 = !DISubprogram(name: "A", line: 4, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 4, file: !1, scope: !4, type: !15) 295!15 = !DISubroutineType(types: !16) 296!16 = !{null, !17, !12} 297!17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4) 298!19 = !DISubprogram(name: "A", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !4, type: !20) 299!20 = !DISubroutineType(types: !21) 300!21 = !{null, !17, !22} 301!22 = !DIDerivedType(tag: DW_TAG_reference_type, size: 64, align: 64, baseType: !23) 302!23 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4) 303!25 = !DISubprogram(name: "operator=", linkageName: "_ZN1AaSERKS_", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 7, file: !1, scope: !4, type: !26) 304!26 = !DISubroutineType(types: !27) 305!27 = !{!22, !17, !22} 306!29 = !DISubprogram(name: "~A", line: 8, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 8, file: !1, scope: !4, type: !30, containingType: !4) 307!30 = !DISubroutineType(types: !31) 308!31 = !{null, !17} 309!33 = !DISubprogram(name: "get_int", linkageName: "_ZN1A7get_intEv", line: 10, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 10, file: !1, scope: !4, type: !34) 310!34 = !DISubroutineType(types: !35) 311!35 = !{!12, !17} 312!37 = !DICompositeType(tag: DW_TAG_class_type, name: "B", line: 38, size: 8, align: 8, file: !1, elements: !38, identifier: "_ZTS1B") 313!38 = !{!39, !44} 314!39 = !DISubprogram(name: "B", line: 41, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 41, file: !1, scope: !37, type: !40) 315!40 = !DISubroutineType(types: !41) 316!41 = !{null, !42} 317!42 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !37) 318!44 = !DISubprogram(name: "AInstance", linkageName: "_ZN1B9AInstanceEv", line: 43, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 43, file: !1, scope: !37, type: !45) 319!45 = !DISubroutineType(types: !46) 320!46 = !{!4, !42} 321!49 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2Ei", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 18, file: !1, scope: !4, type: !15, declaration: !14, retainedNodes: !2) 322!50 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2ERKS_", line: 21, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 23, file: !1, scope: !4, type: !20, declaration: !19, retainedNodes: !2) 323!51 = distinct !DISubprogram(name: "operator=", linkageName: "_ZN1AaSERKS_", line: 27, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 28, file: !1, scope: !4, type: !26, declaration: !25, retainedNodes: !2) 324!52 = distinct !DISubprogram(name: "get_int", linkageName: "_ZN1A7get_intEv", line: 33, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 34, file: !1, scope: !4, type: !34, declaration: !33, retainedNodes: !2) 325!53 = distinct !DISubprogram(name: "AInstance", linkageName: "_ZN1B9AInstanceEv", line: 47, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 48, file: !1, scope: !37, type: !45, declaration: !44, retainedNodes: !2) 326!54 = distinct !DISubprogram(name: "main", line: 53, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 54, file: !1, scope: !7, type: !55, retainedNodes: !2) 327!55 = !DISubroutineType(types: !56) 328!56 = !{!12, !12, !57} 329!57 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !58) 330!58 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !59) 331!59 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !60) 332!60 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) 333!61 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD0Ev", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !4, type: !30, declaration: !29, retainedNodes: !2) 334!62 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 41, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 41, file: !1, scope: !37, type: !40, declaration: !39, retainedNodes: !2) 335!63 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD2Ev", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !4, type: !30, declaration: !29, retainedNodes: !2) 336!64 = !{i32 2, !"Dwarf Version", i32 4} 337!65 = !{i32 1, !"Debug Info Version", i32 3} 338!66 = !{!"clang version 3.5.0 (trunk 203283) (llvm/trunk 203307)"} 339!67 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !49, type: !68) 340!68 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4) 341!69 = !DILocation(line: 0, scope: !49) 342!70 = !DILocalVariable(name: "i", line: 16, arg: 2, scope: !49, file: !7, type: !12) 343!71 = !DILocation(line: 16, scope: !49) 344!72 = !DILocation(line: 18, scope: !49) 345!73 = !DILocation(line: 19, scope: !49) 346!74 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !50, type: !68) 347!75 = !DILocation(line: 0, scope: !50) 348!76 = !DILocalVariable(name: "rhs", line: 21, arg: 2, scope: !50, file: !7, type: !22) 349!77 = !DILocation(line: 21, scope: !50) 350!78 = !DILocation(line: 23, scope: !50) 351!79 = !DILocation(line: 24, scope: !50) 352!80 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !51, type: !68) 353!81 = !DILocation(line: 0, scope: !51) 354!82 = !DILocalVariable(name: "rhs", line: 27, arg: 2, scope: !51, file: !7, type: !22) 355!83 = !DILocation(line: 27, scope: !51) 356!84 = !DILocation(line: 29, scope: !51) 357!85 = !DILocation(line: 30, scope: !51) 358!86 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !52, type: !68) 359!87 = !DILocation(line: 0, scope: !52) 360!88 = !DILocation(line: 35, scope: !52) 361!89 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !53, type: !90) 362!90 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !37) 363!91 = !DILocation(line: 0, scope: !53) 364!92 = !DILocation(line: 49, scope: !53) 365!93 = !DILocalVariable(name: "a", line: 49, scope: !53, file: !7, type: !4) 366!94 = !DILocation(line: 50, scope: !53) 367!95 = !DILocation(line: 51, scope: !53) 368!96 = !DILocation(line: 51, scope: !97) 369!97 = distinct !DILexicalBlock(line: 51, column: 0, file: !1, scope: !53) 370!98 = !DILocation(line: 51, scope: !99) 371!99 = distinct !DILexicalBlock(line: 51, column: 0, file: !1, scope: !100) 372!100 = distinct !DILexicalBlock(line: 51, column: 0, file: !1, scope: !53) 373!101 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !63, type: !68) 374!102 = !DILocation(line: 0, scope: !63) 375!103 = !DILocation(line: 8, scope: !63) 376!104 = !DILocalVariable(name: "argc", line: 53, arg: 1, scope: !54, file: !7, type: !12) 377!105 = !DILocation(line: 53, scope: !54) 378!106 = !DILocalVariable(name: "argv", line: 53, arg: 2, scope: !54, file: !7, type: !57) 379!107 = !DILocalVariable(name: "b", line: 55, scope: !54, file: !7, type: !37) 380!108 = !DILocation(line: 55, scope: !54) 381!109 = !DILocalVariable(name: "return_val", line: 56, scope: !54, file: !7, type: !12) 382!110 = !DILocation(line: 56, scope: !54) 383!111 = !DILocation(line: 56, scope: !112) 384!112 = distinct !DILexicalBlock(line: 56, column: 0, file: !1, scope: !54) 385!113 = !DILocalVariable(name: "a", line: 58, scope: !54, file: !7, type: !4) 386!114 = !DILocation(line: 58, scope: !54) 387!115 = !DILocation(line: 59, scope: !54) 388!116 = !DILocation(line: 60, scope: !54) 389!117 = !DILocation(line: 60, scope: !118) 390!118 = distinct !DILexicalBlock(line: 60, column: 0, file: !1, scope: !54) 391!119 = !DILocation(line: 60, scope: !120) 392!120 = distinct !DILexicalBlock(line: 60, column: 0, file: !1, scope: !54) 393!121 = !DILocation(line: 60, scope: !122) 394!122 = distinct !DILexicalBlock(line: 60, column: 0, file: !1, scope: !54) 395!123 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !62, type: !90) 396!124 = !DILocation(line: 0, scope: !62) 397!125 = !DILocation(line: 41, scope: !62) 398!126 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !61, type: !68) 399!127 = !DILocation(line: 0, scope: !61) 400!128 = !DILocation(line: 8, scope: !61) 401!129 = !DILocation(line: 8, scope: !130) 402!130 = distinct !DILexicalBlock(line: 8, column: 0, file: !1, scope: !61) 403!131 = !DILocation(line: 8, scope: !132) 404!132 = distinct !DILexicalBlock(line: 8, column: 0, file: !1, scope: !61) 405!133 = !DILocation(line: 8, scope: !134) 406!134 = distinct !DILexicalBlock(line: 8, column: 0, file: !1, scope: !61) 407