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