[bazel] Replace strip_include_prefix in lldb with includes (#125293)
[llvm-project.git] / llvm / test / DebugInfo / X86 / sret.ll
blobbe7c36111d39af092a03d6654f6cf2a22872c6d8
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
6 ; Based on the debuginfo-tests/sret.cpp code.
8 ; CHECK-DWO: DW_AT_GNU_dwo_id (0x044dcdf3d75b11a1)
9 ; CHECK-DWO: DW_AT_GNU_dwo_id (0x044dcdf3d75b11a1)
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
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
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"
27 %class.A = type { ptr, i32 }
28 %class.B = type { i8 }
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 }
35 @_ZN1AC1Ei = alias void (ptr, i32), ptr @_ZN1AC2Ei
36 @_ZN1AC1ERKS_ = alias void (ptr, ptr), ptr @_ZN1AC2ERKS_
38 ; Function Attrs: nounwind uwtable
39 define void @_ZN1AC2Ei(ptr %this, i32 %i) unnamed_addr #0 align 2 !dbg !49 {
40 entry:
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
55 ; Function Attrs: nounwind readnone
56 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
58 ; Function Attrs: nounwind uwtable
59 define void @_ZN1AC2ERKS_(ptr %this, ptr %rhs) unnamed_addr #0 align 2 !dbg !50 {
60 entry:
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
77 ; Function Attrs: nounwind uwtable
78 define ptr @_ZN1AaSERKS_(ptr %this, ptr %rhs) #0 align 2 !dbg !51 {
79 entry:
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
95 ; Function Attrs: nounwind uwtable
96 define i32 @_ZN1A7get_intEv(ptr %this) #0 align 2 !dbg !52 {
97 entry:
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
107 ; Function Attrs: uwtable
108 define void @_ZN1B9AInstanceEv(ptr noalias sret(%class.A) %agg.result, ptr %this) #2 align 2 !dbg !53 {
109 entry:
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
124 nrvo.unused:                                      ; preds = %entry
125   call void @_ZN1AD2Ev(ptr %agg.result), !dbg !96
126   br label %nrvo.skipdtor, !dbg !96
128 nrvo.skipdtor:                                    ; preds = %nrvo.unused, %entry
129   ret void, !dbg !98
132 ; Function Attrs: nounwind uwtable
133 define linkonce_odr void @_ZN1AD2Ev(ptr %this) unnamed_addr #0 align 2 !dbg !63 {
134 entry:
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
142 ; Function Attrs: uwtable
143 define i32 @main(i32 %argc, ptr %argv) #2 personality ptr @__gxx_personality_v0 !dbg !54 {
144 entry:
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
167 invoke.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
179 lpad:                                             ; 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
189 invoke.cont1:                                     ; preds = %lpad
190   br label %eh.resume, !dbg !117
192 eh.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
199 terminate.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
207 ; Function Attrs: nounwind uwtable
208 define linkonce_odr void @_ZN1BC2Ev(ptr %this) unnamed_addr #0 align 2 !dbg !62 {
209 entry:
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
217 declare i32 @__gxx_personality_v0(...)
219 ; Function Attrs: noinline noreturn nounwind
220 define 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
226 declare ptr @__cxa_begin_catch(ptr)
228 declare void @_ZSt9terminatev()
230 ; Function Attrs: uwtable
231 define linkonce_odr void @_ZN1AD0Ev(ptr %this) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 !dbg !61 {
232 entry:
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
242 invoke.cont:                                      ; preds = %entry
243   call void @_ZdlPv(ptr %this1) #7, !dbg !129
244   ret void, !dbg !129
246 lpad:                                             ; 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
256 eh.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
264 ; Function Attrs: nobuiltin nounwind
265 declare void @_ZdlPv(ptr) #4
267 attributes #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" }
268 attributes #1 = { nounwind readnone }
269 attributes #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" }
270 attributes #3 = { noinline noreturn nounwind }
271 attributes #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" }
272 attributes #5 = { noreturn nounwind }
273 attributes #6 = { nounwind }
274 attributes #7 = { builtin nounwind }
276 !llvm.dbg.cu = !{!0}
277 !llvm.module.flags = !{!64, !65}
278 !llvm.ident = !{!66}
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)