Home | History | Annotate | Download | only in X86
      1 ; RUN: llc -mtriple=x86_64-linux < %s -filetype=obj | llvm-dwarfdump -debug-dump=info - | FileCheck %s
      2 
      3 ; test that we add DW_AT_inline even when we only have concrete out of line
      4 ; instances.
      5 
      6 ; first check that we have a TAG_subprogram at a given offset and it has
      7 ; AT_inline.
      8 
      9 ; CHECK: DW_TAG_class_type
     10 ; CHECK:   DW_TAG_subprogram
     11 ; CHECK: [[ASSIGN_DECL:0x........]]:  DW_TAG_subprogram
     12 
     13 ; CHECK: DW_TAG_class_type
     14 ; CHECK: [[RELEASE_DECL:0x........]]:  DW_TAG_subprogram
     15 ; CHECK: [[DTOR_DECL:0x........]]:  DW_TAG_subprogram
     16 
     17 ; CHECK: [[D2_ABS:.*]]: DW_TAG_subprogram
     18 ; CHECK-NEXT:     DW_AT_{{.*}}linkage_name {{.*}}D2
     19 ; CHECK-NEXT:     DW_AT_specification {{.*}} {[[DTOR_DECL]]}
     20 ; CHECK-NEXT:     DW_AT_inline
     21 ; CHECK-NOT:      DW_AT
     22 ; CHECK: DW_TAG
     23 ; CHECK: [[D1_ABS:.*]]: DW_TAG_subprogram
     24 ; CHECK-NEXT:     DW_AT_{{.*}}linkage_name {{.*}}D1
     25 ; CHECK-NEXT:     DW_AT_specification {{.*}} {[[DTOR_DECL]]}
     26 ; CHECK-NEXT:     DW_AT_inline
     27 ; CHECK-NOT:     DW_AT
     28 ; CHECK: [[D1_THIS_ABS:.*]]: DW_TAG_formal_parameter
     29 
     30 ; CHECK: [[RELEASE:0x........]]: DW_TAG_subprogram
     31 ; CHECK:     DW_AT_specification {{.*}} {[[RELEASE_DECL]]}
     32 ; CHECK: DW_TAG_formal_parameter
     33 ; CHECK-NOT: NULL
     34 ; CHECK-NOT: DW_TAG
     35 ; CHECK: DW_TAG_lexical_block
     36 ; CHECK-NOT: NULL
     37 ; CHECK-NOT: DW_TAG
     38 ; CHECK: DW_TAG_inlined_subroutine
     39 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[ASSIGN:0x........]]}
     40 ; CHECK-NOT: NULL
     41 ; CHECK-NOT: DW_TAG
     42 ; CHECK: DW_TAG_inlined_subroutine
     43 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D1_ABS]]}
     44 ; CHECK-NOT: NULL
     45 ; CHECK-NOT: DW_TAG
     46 ; CHECK: DW_TAG_inlined_subroutine
     47 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D2_ABS]]}
     48 
     49 ; and then that a TAG_subprogram refers to it with AT_abstract_origin.
     50 
     51 ; CHECK: DW_TAG_subprogram
     52 ; CHECK-NOT: DW_TAG
     53 ; CHECK: DW_AT_abstract_origin {{.*}} {[[D1_ABS]]}
     54 ; CHECK: DW_TAG_formal_parameter
     55 ; CHECK-NOT: DW_TAG
     56 ; CHECK: DW_AT_abstract_origin {{.*}} {[[D1_THIS_ABS]]}
     57 ; CHECK: DW_TAG_inlined_subroutine
     58 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D2_ABS]]}
     59 
     60 
     61 define i32 @_ZN17nsAutoRefCnt7ReleaseEv() {
     62 entry:
     63   store i32 1, i32* null, align 4, !dbg !50
     64   tail call void @_Z8moz_freePv(i8* null) nounwind, !dbg !54
     65   ret i32 0
     66 }
     67 
     68 define void @_ZN17nsAutoRefCntD1Ev() {
     69 entry:
     70   tail call void @_Z8moz_freePv(i8* null) nounwind, !dbg !57
     71   ret void
     72 }
     73 
     74 declare void @_Z8moz_freePv(i8*)
     75 
     76 !llvm.dbg.cu = !{!0}
     77 !llvm.module.flags = !{!60}
     78 
     79 !0 = metadata !{i32 786449, metadata !59, i32 4, metadata !"clang version 3.1 ()", i1 true, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !47,  metadata !1, metadata !""} ; [ DW_TAG_compile_unit ]
     80 !1 = metadata !{}
     81 !3 = metadata !{metadata !5, metadata !23, metadata !27, metadata !31}
     82 !5 = metadata !{i32 720942, metadata !6, null, metadata !"Release", metadata !"Release", metadata !"_ZN17nsAutoRefCnt7ReleaseEv", i32 14, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, i32 ()* @_ZN17nsAutoRefCnt7ReleaseEv , null, metadata !12, metadata !20, i32 14} ; [ DW_TAG_subprogram ] [line 14] [def] [Release]
     83 !6 = metadata !{i32 720937, metadata !59} ; [ DW_TAG_file_type ]
     84 !7 = metadata !{i32 720917, i32 0, null, i32 0, i32 0, i64 0, i64 0, i32 0, i32 0, null, metadata !8, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
     85 !8 = metadata !{metadata !9, metadata !10}
     86 !9 = metadata !{i32 720932, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
     87 !10 = metadata !{i32 786447, i32 0, null, i32 0, i32 0, i64 64, i64 64, i64 0, i32 64, metadata !11} ; [ DW_TAG_pointer_type ]
     88 !11 = metadata !{i32 786451, metadata !59, null, metadata !"nsAutoRefCnt", i32 10, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [nsAutoRefCnt] [line 10, size 0, align 0, offset 0] [decl] [from ]
     89 !12 = metadata !{i32 720942, metadata !6, metadata !13, metadata !"Release", metadata !"Release", metadata !"_ZN17nsAutoRefCnt7ReleaseEv", i32 11, metadata !7, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 true, null, null, i32 0, metadata !18, i32 11} ; [ DW_TAG_subprogram ]
     90 !13 = metadata !{i32 720898, metadata !59, null, metadata !"nsAutoRefCnt", i32 10, i64 8, i64 8, i32 0, i32 0, null, metadata !14, null, null, null} ; [ DW_TAG_class_type ]
     91 !14 = metadata !{metadata !12, metadata !15}
     92 !15 = metadata !{i32 720942, metadata !6, metadata !13, metadata !"~nsAutoRefCnt", metadata !"~nsAutoRefCnt", metadata !"", i32 12, metadata !16, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 true, null, null, i32 0, metadata !18, i32 12} ; [ DW_TAG_subprogram ]
     93 !16 = metadata !{i32 720917, i32 0, null, i32 0, i32 0, i64 0, i64 0, i32 0, i32 0, null, metadata !17, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
     94 !17 = metadata !{null, metadata !10}
     95 !18 = metadata !{}
     96 !20 = metadata !{metadata !22}
     97 !22 = metadata !{i32 786689, metadata !5, metadata !"this", metadata !6, i32 16777230, metadata !10, i32 64, i32 0} ; [ DW_TAG_arg_variable ]
     98 !23 = metadata !{i32 720942, metadata !6, null, metadata !"~nsAutoRefCnt", metadata !"~nsAutoRefCnt", metadata !"_ZN17nsAutoRefCntD1Ev", i32 18, metadata !16, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, void ()* @_ZN17nsAutoRefCntD1Ev, null, metadata !15, metadata !24, i32 18} ; [ DW_TAG_subprogram ] [line 18] [def] [~nsAutoRefCnt]
     99 !24 = metadata !{metadata !26}
    100 !26 = metadata !{i32 786689, metadata !23, metadata !"this", metadata !6, i32 16777234, metadata !10, i32 64, i32 0} ; [ DW_TAG_arg_variable ]
    101 !27 = metadata !{i32 720942, metadata !6, null, metadata !"~nsAutoRefCnt", metadata !"~nsAutoRefCnt", metadata !"_ZN17nsAutoRefCntD2Ev", i32 18, metadata !16, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, i32* null, null, metadata !15, metadata !28, i32 18} ; [ DW_TAG_subprogram ] [line 18] [def] [~nsAutoRefCnt]
    102 !28 = metadata !{metadata !30}
    103 !30 = metadata !{i32 786689, metadata !27, metadata !"this", metadata !6, i32 16777234, metadata !10, i32 64, i32 0} ; [ DW_TAG_arg_variable ]
    104 !31 = metadata !{i32 720942, metadata !6, null, metadata !"operator=", metadata !"operator=", metadata !"_ZN12nsAutoRefCntaSEi", i32 4, metadata !32, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, null, null, metadata !36, metadata !43, i32 4} ; [ DW_TAG_subprogram ] [line 4] [def] [operator=]
    105 !32 = metadata !{i32 720917, i32 0, null, i32 0, i32 0, i64 0, i64 0, i32 0, i32 0, null, metadata !33, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
    106 !33 = metadata !{metadata !9, metadata !34, metadata !9}
    107 !34 = metadata !{i32 786447, i32 0, null, i32 0, i32 0, i64 64, i64 64, i64 0, i32 64, metadata !35} ; [ DW_TAG_pointer_type ]
    108 !35 = metadata !{i32 786451, metadata !59, null, metadata !"nsAutoRefCnt", i32 2, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [nsAutoRefCnt] [line 2, size 0, align 0, offset 0] [decl] [from ]
    109 !36 = metadata !{i32 720942, metadata !6, metadata !37, metadata !"operator=", metadata !"operator=", metadata !"_ZN12nsAutoRefCntaSEi", i32 4, metadata !32, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 true, null, null, i32 0, metadata !18, i32 4} ; [ DW_TAG_subprogram ]
    110 !37 = metadata !{i32 720898, metadata !59, null, metadata !"nsAutoRefCnt", i32 2, i64 32, i64 32, i32 0, i32 0, null, metadata !38, i32 0, null, null, null} ; [ DW_TAG_class_type ] [nsAutoRefCnt] [line 2, size 32, align 32, offset 0] [def] [from ]
    111 !38 = metadata !{metadata !39, metadata !40, metadata !36}
    112 !39 = metadata !{i32 786445, metadata !59, metadata !37, metadata !"mValue", i32 7, i64 32, i64 32, i64 0, i32 0, metadata !9} ; [ DW_TAG_member ]
    113 !40 = metadata !{i32 720942, metadata !6, metadata !37, metadata !"nsAutoRefCnt", metadata !"nsAutoRefCnt", metadata !"", i32 3, metadata !41, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 true, null, null, i32 0, metadata !18, i32 3} ; [ DW_TAG_subprogram ]
    114 !41 = metadata !{i32 720917, i32 0, null, i32 0, i32 0, i64 0, i64 0, i32 0, i32 0, null, metadata !42, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
    115 !42 = metadata !{null, metadata !34}
    116 !43 = metadata !{metadata !45, metadata !46}
    117 !45 = metadata !{i32 786689, metadata !31, metadata !"this", metadata !6, i32 16777220, metadata !34, i32 64, i32 0} ; [ DW_TAG_arg_variable ]
    118 !46 = metadata !{i32 786689, metadata !31, metadata !"aValue", metadata !6, i32 33554436, metadata !9, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
    119 !47 = metadata !{metadata !49}
    120 !49 = metadata !{i32 720948, i32 0, null, metadata !"mRefCnt", metadata !"mRefCnt", metadata !"", metadata !6, i32 9, metadata !37, i32 0, i32 1, i32* null, null} ; [ DW_TAG_variable ]
    121 !50 = metadata !{i32 5, i32 5, metadata !51, metadata !52}
    122 !51 = metadata !{i32 786443, metadata !6, metadata !31, i32 4, i32 29, i32 2} ; [ DW_TAG_lexical_block ]
    123 !52 = metadata !{i32 15, i32 0, metadata !53, null}
    124 !53 = metadata !{i32 786443, metadata !6, metadata !5, i32 14, i32 34, i32 0} ; [ DW_TAG_lexical_block ]
    125 !54 = metadata !{i32 19, i32 3, metadata !55, metadata !56}
    126 !55 = metadata !{i32 786443, metadata !6, metadata !27, i32 18, i32 41, i32 1} ; [ DW_TAG_lexical_block ]
    127 !56 = metadata !{i32 18, i32 41, metadata !23, metadata !52}
    128 !57 = metadata !{i32 19, i32 3, metadata !55, metadata !58}
    129 !58 = metadata !{i32 18, i32 41, metadata !23, null}
    130 !59 = metadata !{metadata !"nsAutoRefCnt.ii", metadata !"/Users/espindola/mozilla-central/obj-x86_64-apple-darwin11.2.0/netwerk/base/src"}
    131 !60 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
    132