diff options
Diffstat (limited to 'test/DebugInfo/X86')
35 files changed, 799 insertions, 343 deletions
diff --git a/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll b/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll index 1bbfbf4..4dc747f 100644 --- a/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll +++ b/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll @@ -37,13 +37,19 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone !20 = metadata !{metadata !"test.c", metadata !"/work/llvm/vanilla/test/DebugInfo"} ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB") +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB") +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_decl_file [DW_FORM_data1] (0x01) +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_decl_line [DW_FORM_data1] (0x01) ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC") +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC") +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_decl_file [DW_FORM_data1] (0x01) +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_decl_line [DW_FORM_data1] (0x04) !21 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} diff --git a/test/DebugInfo/X86/DW_AT_location-reference.ll b/test/DebugInfo/X86/DW_AT_location-reference.ll index 6c5e32c0..f31b0ad 100644 --- a/test/DebugInfo/X86/DW_AT_location-reference.ll +++ b/test/DebugInfo/X86/DW_AT_location-reference.ll @@ -31,11 +31,11 @@ ; // The 'x' variable and its symbol reference location ; CHECK: .debug_info contents: ; CHECK: DW_TAG_variable +; CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x00000000) ; CHECK-NEXT: DW_AT_name {{.*}} "x" ; CHECK-NEXT: DW_AT_decl_file ; CHECK-NEXT: DW_AT_decl_line ; CHECK-NEXT: DW_AT_type -; CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x00000000) ; Check that the location contains only 4 ranges - this verifies that the 4th ; and 5th ranges were successfully merged into a single range. diff --git a/test/DebugInfo/X86/DW_AT_object_pointer.ll b/test/DebugInfo/X86/DW_AT_object_pointer.ll index 5fa9699..4b9fae8 100644 --- a/test/DebugInfo/X86/DW_AT_object_pointer.ll +++ b/test/DebugInfo/X86/DW_AT_object_pointer.ll @@ -7,7 +7,8 @@ ; CHECK: DW_TAG_class_type ; CHECK: DW_AT_object_pointer [DW_FORM_ref4] (cu + 0x{{[0-9a-f]*}} => {[[PARAM:0x[0-9a-f]*]]}) ; CHECK: [[PARAM]]: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "this") +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "this") %class.A = type { i32 } diff --git a/test/DebugInfo/X86/DW_AT_specification.ll b/test/DebugInfo/X86/DW_AT_specification.ll index b93cdf0..4f45f36 100644 --- a/test/DebugInfo/X86/DW_AT_specification.ll +++ b/test/DebugInfo/X86/DW_AT_specification.ll @@ -6,7 +6,8 @@ ; CHECK: [[BAR_DECL:0x[0-9a-f]*]]: DW_TAG_subprogram ; CHECK-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN3foo3barEv" ; CHECK: DW_TAG_subprogram -; CHECK-NEXT: DW_AT_specification {{.*}} {[[BAR_DECL]]} +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_specification {{.*}} {[[BAR_DECL]]} @_ZZN3foo3barEvE1x = constant i32 0, align 4 @@ -36,6 +37,6 @@ entry: !21 = metadata !{i32 720934, null, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, metadata !22} ; [ DW_TAG_const_type ] !22 = metadata !{i32 720932, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] !25 = metadata !{i32 6, i32 1, metadata !26, null} -!26 = metadata !{i32 786443, metadata !5, i32 4, i32 17, metadata !6, i32 0} ; [ DW_TAG_lexical_block ] +!26 = metadata !{i32 786443, metadata !6, metadata !5, i32 4, i32 17, i32 0} ; [ DW_TAG_lexical_block ] !27 = metadata !{metadata !"nsNativeAppSupportBase.ii", metadata !"/Users/espindola/mozilla-central/obj-x86_64-apple-darwin11.2.0/toolkit/library"} !28 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} diff --git a/test/DebugInfo/X86/arguments.ll b/test/DebugInfo/X86/arguments.ll index 3597b2c..989e4ff 100644 --- a/test/DebugInfo/X86/arguments.ll +++ b/test/DebugInfo/X86/arguments.ll @@ -19,10 +19,12 @@ ; CHECK: DW_AT_MIPS_linkage_name{{.*}}"_Z4func3fooS_" ; CHECK-NOT: NULL ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name{{.*}}"f" +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"f" ; CHECK-NOT: NULL ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name{{.*}}"g" +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"g" %struct.foo = type { i32 } diff --git a/test/DebugInfo/X86/block-capture.ll b/test/DebugInfo/X86/block-capture.ll index 31b4fa9..e842afe 100644 --- a/test/DebugInfo/X86/block-capture.ll +++ b/test/DebugInfo/X86/block-capture.ll @@ -6,13 +6,13 @@ ; Checks that we emit debug info for the block variable declare. ; CHECK: DW_TAG_subprogram ; CHECK: DW_TAG_variable -; CHECK: DW_AT_name {{.*}} "block" ; CHECK: DW_AT_location [DW_FORM_sec_offset] +; CHECK: DW_AT_name {{.*}} "block" ; DWARF3: DW_TAG_subprogram ; DWARF3: DW_TAG_variable -; DWARF3: DW_AT_name {{.*}} "block" ; DWARF3: DW_AT_location [DW_FORM_data4] +; DWARF3: DW_AT_name {{.*}} "block" %struct.__block_descriptor = type { i64, i64 } %struct.__block_literal_generic = type { i8*, i32, i32, i8*, %struct.__block_descriptor* } @@ -118,15 +118,16 @@ declare i32 @__objc_personality_v0(...) !50 = metadata !{i32 786445, metadata !63, metadata !6, metadata !"block", i32 7, i64 64, i64 64, i64 256, i32 0, metadata !9} ; [ DW_TAG_member ] !51 = metadata !{i32 7, i32 18, metadata !28, null} !52 = metadata !{i32 7, i32 19, metadata !28, null} -!53 = metadata !{i32 786688, metadata !28, metadata !"block", metadata !6, i32 5, metadata !9, i32 0, i32 0, i64 1, i64 32} ; [ DW_TAG_auto_variable ] +!53 = metadata !{i32 786688, metadata !28, metadata !"block", metadata !6, i32 5, metadata !9, i32 0, i32 0, metadata !65} ; [ DW_TAG_auto_variable ] !54 = metadata !{i32 5, i32 27, metadata !28, null} !55 = metadata !{i32 8, i32 22, metadata !56, null} -!56 = metadata !{i32 786443, metadata !57, i32 7, i32 26, metadata !6, i32 2} ; [ DW_TAG_lexical_block ] -!57 = metadata !{i32 786443, metadata !28, i32 7, i32 19, metadata !6, i32 1} ; [ DW_TAG_lexical_block ] +!56 = metadata !{i32 786443, metadata !6, metadata !57, i32 7, i32 26, i32 2} ; [ DW_TAG_lexical_block ] +!57 = metadata !{i32 786443, metadata !6, metadata !28, i32 7, i32 19, i32 1} ; [ DW_TAG_lexical_block ] !58 = metadata !{i32 10, i32 20, metadata !59, null} -!59 = metadata !{i32 786443, metadata !60, i32 9, i32 35, metadata !6, i32 4} ; [ DW_TAG_lexical_block ] -!60 = metadata !{i32 786443, metadata !57, i32 9, i32 35, metadata !6, i32 3} ; [ DW_TAG_lexical_block ] +!59 = metadata !{i32 786443, metadata !6, metadata !60, i32 9, i32 35, i32 4} ; [ DW_TAG_lexical_block ] +!60 = metadata !{i32 786443, metadata !6, metadata !57, i32 9, i32 35, i32 3} ; [ DW_TAG_lexical_block ] !61 = metadata !{i32 10, i32 21, metadata !28, null} !62 = metadata !{i32 9, i32 20, metadata !56, null} !63 = metadata !{metadata !"foo.m", metadata !"/Users/echristo"} !64 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} +!65 = metadata !{i64 1, i64 32} diff --git a/test/DebugInfo/X86/byvalstruct.ll b/test/DebugInfo/X86/byvalstruct.ll index 731f8db..d787ef3 100644 --- a/test/DebugInfo/X86/byvalstruct.ll +++ b/test/DebugInfo/X86/byvalstruct.ll @@ -6,7 +6,8 @@ ; CHECK: DW_TAG_formal_parameter ; CHECK: DW_TAG_formal_parameter ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name {{.*}} "info" +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "info" ; ; generated from ; diff --git a/test/DebugInfo/X86/coff_debug_info_type.ll b/test/DebugInfo/X86/coff_debug_info_type.ll index a0b8ccc..a1051c3 100644 --- a/test/DebugInfo/X86/coff_debug_info_type.ll +++ b/test/DebugInfo/X86/coff_debug_info_type.ll @@ -6,6 +6,8 @@ ; RUN: llc -mtriple=i686-pc-win32 -filetype=asm -O0 < %s | FileCheck -check-prefix=WIN32 %s ; WIN32: .section .debug$S,"rnd" +; RUN: llc -mtriple=i686-pc-win32 -filetype=null -O0 < %s + ; generated from: ; clang -g -S -emit-llvm test.c -o test.ll ; int main() diff --git a/test/DebugInfo/X86/concrete_out_of_line.ll b/test/DebugInfo/X86/concrete_out_of_line.ll index 40300de..ac038f3 100644 --- a/test/DebugInfo/X86/concrete_out_of_line.ll +++ b/test/DebugInfo/X86/concrete_out_of_line.ll @@ -79,7 +79,7 @@ declare void @_Z8moz_freePv(i8*) !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 ] !1 = metadata !{} !3 = metadata !{metadata !5, metadata !23, metadata !27, metadata !31} -!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* null, null, metadata !12, metadata !20, i32 14} ; [ DW_TAG_subprogram ] [line 14] [def] [Release] +!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] !6 = metadata !{i32 720937, metadata !59} ; [ DW_TAG_file_type ] !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 ] !8 = metadata !{metadata !9, metadata !10} @@ -95,7 +95,7 @@ declare void @_Z8moz_freePv(i8*) !18 = metadata !{} !20 = metadata !{metadata !22} !22 = metadata !{i32 786689, metadata !5, metadata !"this", metadata !6, i32 16777230, metadata !10, i32 64, i32 0} ; [ DW_TAG_arg_variable ] -!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, i32* null, null, metadata !15, metadata !24, i32 18} ; [ DW_TAG_subprogram ] [line 18] [def] [~nsAutoRefCnt] +!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] !24 = metadata !{metadata !26} !26 = metadata !{i32 786689, metadata !23, metadata !"this", metadata !6, i32 16777234, metadata !10, i32 64, i32 0} ; [ DW_TAG_arg_variable ] !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] diff --git a/test/DebugInfo/X86/dbg-const-int.ll b/test/DebugInfo/X86/dbg-const-int.ll index f2f51c9..bf7ee08 100644 --- a/test/DebugInfo/X86/dbg-const-int.ll +++ b/test/DebugInfo/X86/dbg-const-int.ll @@ -1,12 +1,14 @@ -; RUN: llc -mtriple=x86_64-apple-darwin12 -filetype=obj %s -o %t -; RUN: llvm-dwarfdump %t | FileCheck %s +; RUN: llc -mtriple=x86_64-apple-darwin12 -filetype=obj < %s \ +; RUN: | llvm-dwarfdump -debug-dump=info - | FileCheck %s target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-apple-macosx10.6.7" ; Radar 9511391 ; CHECK: DW_TAG_variable -; CHECK: "i" -; CHECK: DW_AT_const_value [DW_FORM_sdata] (42) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_const_value [DW_FORM_sdata] (42) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "i" define i32 @foo() nounwind uwtable readnone optsize ssp { entry: diff --git a/test/DebugInfo/X86/dbg-value-const-byref.ll b/test/DebugInfo/X86/dbg-value-const-byref.ll index baba0cd..23fa352 100644 --- a/test/DebugInfo/X86/dbg-value-const-byref.ll +++ b/test/DebugInfo/X86/dbg-value-const-byref.ll @@ -20,9 +20,10 @@ ; ; CHECK: .debug_info contents: ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name{{.*}}"i" ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_location [DW_FORM_data4] ([[LOC:.*]]) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"i" ; CHECK: .debug_loc contents: ; CHECK: [[LOC]]: ; consts 0x00000003 diff --git a/test/DebugInfo/X86/dbg-value-inlined-parameter.ll b/test/DebugInfo/X86/dbg-value-inlined-parameter.ll index 1922272..4d18f7d 100644 --- a/test/DebugInfo/X86/dbg-value-inlined-parameter.ll +++ b/test/DebugInfo/X86/dbg-value-inlined-parameter.ll @@ -7,19 +7,22 @@ ; CHECK: DW_TAG_subprogram ; CHECK: DW_AT_abstract_origin {{.*}}{[[ABS:.*]]} -; FIXME: An out of line definition preceeding an inline usage doesn't properly -; reference abstract variables. ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name {{.*}} "sp" +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_abstract_origin {{.*}}{[[ABS_SP:.*]]} ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name {{.*}} "nums" +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_abstract_origin {{.*}}{[[ABS_NUMS:.*]]} ; CHECK: [[ABS]]: DW_TAG_subprogram +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name {{.*}} "foo" -; CHECK: [[ABS_SP:.*]]: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name {{.*}} "sp" -; CHECK: [[ABS_NUMS:.*]]: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name {{.*}} "nums" +; CHECK: [[ABS_SP]]: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "sp" +; CHECK: [[ABS_NUMS]]: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "nums" ;CHECK: DW_TAG_inlined_subroutine ;CHECK-NEXT: DW_AT_abstract_origin {{.*}}{[[ABS]]} @@ -30,9 +33,10 @@ ;CHECK: DW_TAG_formal_parameter ;FIXME: Linux shouldn't drop this parameter either... -;DARWIN-NEXT: DW_AT_abstract_origin {{.*}}{[[ABS_SP]]} +;CHECK-NOT: DW_TAG +;DARWIN: DW_AT_abstract_origin {{.*}}{[[ABS_SP]]} ;DARWIN: DW_TAG_formal_parameter -;CHECK-NEXT: DW_AT_abstract_origin {{.*}}{[[ABS_NUMS]]} +;CHECK: DW_AT_abstract_origin {{.*}}{[[ABS_NUMS]]} ;CHECK-NOT: DW_TAG_formal_parameter %struct.S1 = type { float*, i32 } diff --git a/test/DebugInfo/X86/dbg-value-isel.ll b/test/DebugInfo/X86/dbg-value-isel.ll index f899f48..155f76f 100644 --- a/test/DebugInfo/X86/dbg-value-isel.ll +++ b/test/DebugInfo/X86/dbg-value-isel.ll @@ -92,7 +92,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone !8 = metadata !{i32 786689, metadata !0, metadata !"ip", metadata !1, i32 1, metadata !5, i32 0, null} ; [ DW_TAG_arg_variable ] !9 = metadata !{i32 1, i32 32, metadata !0, null} !10 = metadata !{i32 786688, metadata !11, metadata !"tid", metadata !1, i32 3, metadata !6, i32 0, null} ; [ DW_TAG_auto_variable ] -!11 = metadata !{i32 786443, metadata !0, i32 2, i32 1, metadata !1, i32 1} ; [ DW_TAG_lexical_block ] +!11 = metadata !{i32 786443, metadata !1, metadata !0, i32 2, i32 1, i32 1} ; [ DW_TAG_lexical_block ] !12 = metadata !{i32 5, i32 24, metadata !11, null} !13 = metadata !{i32 786688, metadata !11, metadata !"gid", metadata !1, i32 3, metadata !6, i32 0, null} ; [ DW_TAG_auto_variable ] !14 = metadata !{i32 6, i32 25, metadata !11, null} diff --git a/test/DebugInfo/X86/dbg-value-location.ll b/test/DebugInfo/X86/dbg-value-location.ll index 9184217..55d1ae6 100644 --- a/test/DebugInfo/X86/dbg-value-location.ll +++ b/test/DebugInfo/X86/dbg-value-location.ll @@ -6,11 +6,11 @@ target triple = "x86_64-apple-darwin10.0.0" ; rdar://8950491 ;CHECK: DW_TAG_formal_parameter +;CHECK-NEXT: DW_AT_location ;CHECK-NEXT: DW_AT_name {{.*}} "var" ;CHECK-NEXT: DW_AT_decl_file ;CHECK-NEXT: DW_AT_decl_line ;CHECK-NEXT: DW_AT_type -;CHECK-NEXT: DW_AT_location @dfm = external global i32, align 4 diff --git a/test/DebugInfo/X86/dbg-value-terminator.ll b/test/DebugInfo/X86/dbg-value-terminator.ll index f08f281..974e0ad 100644 --- a/test/DebugInfo/X86/dbg-value-terminator.ll +++ b/test/DebugInfo/X86/dbg-value-terminator.ll @@ -11,84 +11,84 @@ define hidden fastcc %a* @test() #1 { entry: - %0 = icmp eq %a* undef, null, !dbg !1 - br i1 %0, label %"14", label %return, !dbg !1 + %0 = icmp eq %a* undef, null, !dbg !12 + br i1 %0, label %"14", label %return, !dbg !12 "14": ; preds = %"8" - br i1 undef, label %"25", label %"21", !dbg !1 + br i1 undef, label %"25", label %"21", !dbg !12 "21": ; preds = %"14" - br i1 undef, label %may_unswitch_on.exit, label %"6.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"6.i", !dbg !12 "6.i": ; preds = %"21" - br i1 undef, label %"10.i", label %may_unswitch_on.exit, !dbg !1 + br i1 undef, label %"10.i", label %may_unswitch_on.exit, !dbg !12 "10.i": ; preds = %"6.i" - br i1 undef, label %may_unswitch_on.exit, label %"12.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"12.i", !dbg !12 "12.i": ; preds = %"10.i" - br i1 undef, label %"4.i.i", label %"3.i.i", !dbg !1 + br i1 undef, label %"4.i.i", label %"3.i.i", !dbg !12 "3.i.i": ; preds = %"12.i" - br i1 undef, label %"4.i.i", label %VEC_edge_base_index.exit.i, !dbg !1 + br i1 undef, label %"4.i.i", label %VEC_edge_base_index.exit.i, !dbg !12 "4.i.i": ; preds = %"3.i.i", %"12.i" - unreachable, !dbg !1 + unreachable, !dbg !12 VEC_edge_base_index.exit.i: ; preds = %"3.i.i" - br i1 undef, label %may_unswitch_on.exit, label %"16.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"16.i", !dbg !12 "16.i": ; preds = %VEC_edge_base_index.exit.i - br i1 undef, label %"4.i6.i", label %"3.i5.i", !dbg !1 + br i1 undef, label %"4.i6.i", label %"3.i5.i", !dbg !12 "3.i5.i": ; preds = %"16.i" - br i1 undef, label %VEC_edge_base_index.exit7.i, label %"4.i6.i", !dbg !1 + br i1 undef, label %VEC_edge_base_index.exit7.i, label %"4.i6.i", !dbg !12 "4.i6.i": ; preds = %"3.i5.i", %"16.i" - unreachable, !dbg !1 + unreachable, !dbg !12 VEC_edge_base_index.exit7.i: ; preds = %"3.i5.i" - br i1 undef, label %may_unswitch_on.exit, label %"21.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"21.i", !dbg !12 "21.i": ; preds = %VEC_edge_base_index.exit7.i - br i1 undef, label %may_unswitch_on.exit, label %"23.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"23.i", !dbg !12 "23.i": ; preds = %"21.i" - br i1 undef, label %may_unswitch_on.exit, label %"26.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"26.i", !dbg !12 "26.i": ; preds = %"34.i", %"23.i" - %1 = icmp eq i32 undef, 9, !dbg !1 - br i1 %1, label %"34.i", label %"28.i", !dbg !1 + %1 = icmp eq i32 undef, 9, !dbg !12 + br i1 %1, label %"34.i", label %"28.i", !dbg !12 "28.i": ; preds = %"26.i" unreachable "34.i": ; preds = %"26.i" - br i1 undef, label %"26.i", label %"36.i", !dbg !1 + br i1 undef, label %"26.i", label %"36.i", !dbg !12 "36.i": ; preds = %"34.i" - br i1 undef, label %"37.i", label %"38.i", !dbg !1 + br i1 undef, label %"37.i", label %"38.i", !dbg !12 "37.i": ; preds = %"36.i" - br label %"38.i", !dbg !1 + br label %"38.i", !dbg !12 "38.i": ; preds = %"37.i", %"36.i" - br i1 undef, label %"39.i", label %"45.i", !dbg !1 + br i1 undef, label %"39.i", label %"45.i", !dbg !12 "39.i": ; preds = %"38.i" - br i1 undef, label %"41.i", label %may_unswitch_on.exit, !dbg !1 + br i1 undef, label %"41.i", label %may_unswitch_on.exit, !dbg !12 "41.i": ; preds = %"39.i" - br i1 undef, label %may_unswitch_on.exit, label %"42.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"42.i", !dbg !12 "42.i": ; preds = %"41.i" - br i1 undef, label %may_unswitch_on.exit, label %"44.i", !dbg !1 + br i1 undef, label %may_unswitch_on.exit, label %"44.i", !dbg !12 "44.i": ; preds = %"42.i" - %2 = load %a** undef, align 8, !dbg !1 - %3 = bitcast %a* %2 to %a*, !dbg !1 + %2 = load %a** undef, align 8, !dbg !12 + %3 = bitcast %a* %2 to %a*, !dbg !12 call void @llvm.dbg.value(metadata !{%a* %3}, i64 0, metadata !6), !dbg !12 - br label %may_unswitch_on.exit, !dbg !1 + br label %may_unswitch_on.exit, !dbg !12 "45.i": ; preds = %"38.i" unreachable @@ -102,7 +102,7 @@ may_unswitch_on.exit: ; preds = %"44.i", %"42.i", %" "return": %result = phi %a* [ null, %entry ], [ %4, %may_unswitch_on.exit ] - ret %a* %result, !dbg !1 + ret %a* %result, !dbg !12 } attributes #0 = { nounwind readnone } diff --git a/test/DebugInfo/X86/dbg_value_direct.ll b/test/DebugInfo/X86/dbg_value_direct.ll index 28b7dc6..db947ac 100644 --- a/test/DebugInfo/X86/dbg_value_direct.ll +++ b/test/DebugInfo/X86/dbg_value_direct.ll @@ -170,8 +170,9 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n !20 = metadata !{i32 786468} !21 = 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] !22 = metadata !{i32 2, metadata !"Dwarf Version", i32 3} -!23 = metadata !{i32 786689, metadata !4, metadata !"", metadata !5, i32 16777222, metadata !21, i32 0, i32 0, i64 2} ; [ DW_TAG_arg_variable ] [line 6] +!23 = metadata !{i32 786689, metadata !4, metadata !"", metadata !5, i32 16777222, metadata !21, i32 0, i32 0, metadata !28} ; [ DW_TAG_arg_variable ] [line 6] !24 = metadata !{i32 786688, metadata !4, metadata !"a", metadata !5, i32 7, metadata !8, i32 8192, i32 0} ; [ DW_TAG_auto_variable ] [a] [line 7] !25 = metadata !{i32 7, i32 0, metadata !4, null} !26 = metadata !{i32 8, i32 0, metadata !4, null} ; [ DW_TAG_imported_declaration ] !27 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} +!28 = metadata !{i64 2} diff --git a/test/DebugInfo/X86/debug-info-block-captured-self.ll b/test/DebugInfo/X86/debug-info-block-captured-self.ll index 87e8f03..95eda60 100644 --- a/test/DebugInfo/X86/debug-info-block-captured-self.ll +++ b/test/DebugInfo/X86/debug-info-block-captured-self.ll @@ -7,17 +7,19 @@ ; This test is split into two parts, the frontend part can be found at ; llvm/tools/clang/test/CodeGenObjC/debug-info-block-captured-self.m ; -; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} -; CHECK: DW_TAG_variable -; CHECK: {{.*}}DW_AT_name{{.*}}"self"{{.*}} +; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} +; CHECK: DW_TAG_variable ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_location +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"self"{{.*}} ; -; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} -; CHECK: DW_TAG_variable -; CHECK: {{.*}}DW_AT_name{{.*}}"self"{{.*}} +; CHECK: {{.*}}DW_AT_name{{.*}}_block_invoke{{.*}} +; CHECK: DW_TAG_variable ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_location +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"self"{{.*}} ; ; Generated (and then reduced) from ; ---------------------------------------------------------------------- @@ -99,10 +101,12 @@ define internal void @"__24-[Main initWithContext:]_block_invoke_2"(i8* %.block_ !41 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, null} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from ] !42 = metadata !{i32 786478, metadata !1, metadata !1, metadata !"__24-[Main initWithContext:]_block_invoke_2", metadata !"__24-[Main initWithContext:]_block_invoke_2", metadata !"", i32 35, metadata !39, i1 true, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (i8*, i8*)* @"__24-[Main initWithContext:]_block_invoke_2", null, null, metadata !15, i32 35} ; [ DW_TAG_subprogram ] [line 35] [local] [def] [__24-[Main initWithContext:]_block_invoke_2] !84 = metadata !{i32 33, i32 0, metadata !38, null} -!86 = metadata !{i32 786688, metadata !38, metadata !"self", metadata !1, i32 41, metadata !34, i32 0, i32 0, i64 1, i64 32} ; [ DW_TAG_auto_variable ] [self] [line 41] +!86 = metadata !{i32 786688, metadata !38, metadata !"self", metadata !1, i32 41, metadata !34, i32 0, i32 0, metadata !110} ; [ DW_TAG_auto_variable ] [self] [line 41] !87 = metadata !{i32 41, i32 0, metadata !38, null} !103 = metadata !{i32 35, i32 0, metadata !42, null} -!105 = metadata !{i32 786688, metadata !42, metadata !"self", metadata !1, i32 40, metadata !34, i32 0, i32 0, i64 1, i64 32} ; [ DW_TAG_auto_variable ] [self] [line 40] +!105 = metadata !{i32 786688, metadata !42, metadata !"self", metadata !1, i32 40, metadata !34, i32 0, i32 0, metadata !109} ; [ DW_TAG_auto_variable ] [self] [line 40] !106 = metadata !{i32 40, i32 0, metadata !42, null} !107 = metadata !{metadata !"llvm/tools/clang/test/CodeGenObjC/debug-info-block-captured-self.m", metadata !""} !108 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} +!109 = metadata !{i64 1, i64 32} +!110 = metadata !{i64 1, i64 32} diff --git a/test/DebugInfo/X86/debug-info-blocks.ll b/test/DebugInfo/X86/debug-info-blocks.ll index 430c157..8a1a125 100644 --- a/test/DebugInfo/X86/debug-info-blocks.ll +++ b/test/DebugInfo/X86/debug-info-blocks.ll @@ -20,22 +20,23 @@ ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_formal_parameter ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name{{.*}}.block_descriptor -; CHECK-NOT: DW_TAG ; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}.block_descriptor ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name{{.*}}"self" -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_type{{.*}}{[[APTR:.*]]} -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_artificial ; CHECK-NOT: DW_TAG ; 0x06 = DW_OP_deref ; 0x23 = DW_OP_uconst ; 0x91 = DW_OP_fbreg ; CHECK: DW_AT_location{{.*}}91 {{[0-9]+}} 06 23 {{[0-9]+}} ) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}}"self" +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_type{{.*}}{[[APTR:.*]]} +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_artificial ; CHECK: [[APTR]]: DW_TAG_pointer_type ; CHECK-NEXT: {[[A]]} @@ -358,7 +359,7 @@ attributes #3 = { nounwind } !86 = metadata !{i32 786451, metadata !1, null, metadata !"__block_descriptor_withcopydispose", i32 49, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [__block_descriptor_withcopydispose] [line 49, size 0, align 0, offset 0] [decl] [from ] !87 = metadata !{i32 786445, metadata !5, metadata !6, metadata !"self", i32 49, i64 64, i64 64, i64 256, i32 0, metadata !61} ; [ DW_TAG_member ] [self] [line 49, size 64, align 64, offset 256] [from ] !88 = metadata !{i32 49, i32 0, metadata !27, null} -!89 = metadata !{i32 786688, metadata !27, metadata !"self", metadata !32, i32 52, metadata !23, i32 0, i32 0, i64 2, i64 1, i64 32} ; [ DW_TAG_auto_variable ] [self] [line 52] +!89 = metadata !{i32 786688, metadata !27, metadata !"self", metadata !32, i32 52, metadata !23, i32 0, i32 0, metadata !111} ; [ DW_TAG_auto_variable ] [self] [line 52] !90 = metadata !{i32 52, i32 0, metadata !27, null} !91 = metadata !{i32 786688, metadata !92, metadata !"d", metadata !6, i32 50, metadata !93, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [d] [line 50] !92 = metadata !{i32 786443, metadata !5, metadata !27, i32 49, i32 0, i32 2} ; [ DW_TAG_lexical_block ] [llvm/tools/clang/test/CodeGenObjC/debug-info-blocks.m] @@ -380,3 +381,4 @@ attributes #3 = { nounwind } !108 = metadata !{i32 61, i32 0, metadata !36, null} !109 = metadata !{i32 62, i32 0, metadata !36, null} !110 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} +!111 = metadata !{i64 2, i64 1, i64 32} diff --git a/test/DebugInfo/X86/debug-loc-asan.ll b/test/DebugInfo/X86/debug-loc-asan.ll new file mode 100644 index 0000000..b1980ec --- /dev/null +++ b/test/DebugInfo/X86/debug-loc-asan.ll @@ -0,0 +1,186 @@ +; RUN: llc -O0 -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s + +; Verify that we have correct debug info for local variables in code +; instrumented with AddressSanitizer. + +; Generated from the source file test.cc: +; int bar(int y) { +; return y + 2; +; } +; with "clang++ -S -emit-llvm -fsanitize=address -O0 -g test.cc" + +; First, argument variable "y" resides in %rdi: +; CHECK: DEBUG_VALUE: bar:y <- RDI + +; Then its address is stored in a location on a stack: +; CHECK: movq %rdi, [[OFFSET:[0-9]+]](%rsp) +; CHECK-NEXT: [[START_LABEL:.Ltmp[0-9]+]] +; CHECK-NEXT: DEBUG_VALUE: bar:y <- [RSP+[[OFFSET]]] +; This location should be valid until the end of the function. + +; CHECK: .Ldebug_loc{{[0-9]+}}: +; We expect two location ranges for the variable. + +; First, it is stored in %rdx: +; CHECK: .Lset{{[0-9]+}} = .Lfunc_begin0-.Lfunc_begin0 +; CHECK-NEXT: .quad .Lset{{[0-9]+}} +; CHECK-NEXT: .Lset{{[0-9]+}} = [[START_LABEL]]-.Lfunc_begin0 +; CHECK-NEXT: .quad .Lset{{[0-9]+}} +; CHECK: DW_OP_reg5 + +; Then it's addressed via %rsp: +; CHECK: .Lset{{[0-9]+}} = [[START_LABEL]]-.Lfunc_begin0 +; CHECK-NEXT: .quad .Lset{{[0-9]+}} +; CHECK-NEXT: .Lset{{[0-9]+}} = .Lfunc_end0-.Lfunc_begin0 +; CHECK-NEXT: .quad .Lset{{[0-9]+}} +; CHECK: DW_OP_breg7 +; CHECK-NEXT: [[OFFSET]] +; CHECK: DW_OP_deref + +; ModuleID = 'test.cc' +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 1, void ()* @asan.module_ctor }] +@__asan_option_detect_stack_use_after_return = external global i32 +@__asan_gen_ = private unnamed_addr constant [16 x i8] c"1 32 4 6 y.addr\00", align 1 + +; Function Attrs: nounwind sanitize_address uwtable +define i32 @_Z3bari(i32 %y) #0 { +entry: + %MyAlloca = alloca [64 x i8], align 32 + %0 = ptrtoint [64 x i8]* %MyAlloca to i64 + %1 = load i32* @__asan_option_detect_stack_use_after_return + %2 = icmp ne i32 %1, 0 + br i1 %2, label %3, label %5 + +; <label>:3 ; preds = %entry + %4 = call i64 @__asan_stack_malloc_0(i64 64, i64 %0) + br label %5 + +; <label>:5 ; preds = %entry, %3 + %6 = phi i64 [ %0, %entry ], [ %4, %3 ] + %7 = add i64 %6, 32 + %8 = inttoptr i64 %7 to i32* + %9 = inttoptr i64 %6 to i64* + store i64 1102416563, i64* %9 + %10 = add i64 %6, 8 + %11 = inttoptr i64 %10 to i64* + store i64 ptrtoint ([16 x i8]* @__asan_gen_ to i64), i64* %11 + %12 = add i64 %6, 16 + %13 = inttoptr i64 %12 to i64* + store i64 ptrtoint (i32 (i32)* @_Z3bari to i64), i64* %13 + %14 = lshr i64 %6, 3 + %15 = add i64 %14, 2147450880 + %16 = add i64 %15, 0 + %17 = inttoptr i64 %16 to i64* + store i64 -868083100587789839, i64* %17 + %18 = ptrtoint i32* %8 to i64 + %19 = lshr i64 %18, 3 + %20 = add i64 %19, 2147450880 + %21 = inttoptr i64 %20 to i8* + %22 = load i8* %21 + %23 = icmp ne i8 %22, 0 + call void @llvm.dbg.declare(metadata !{i32* %8}, metadata !12) + br i1 %23, label %24, label %30 + +; <label>:24 ; preds = %5 + %25 = and i64 %18, 7 + %26 = add i64 %25, 3 + %27 = trunc i64 %26 to i8 + %28 = icmp sge i8 %27, %22 + br i1 %28, label %29, label %30 + +; <label>:29 ; preds = %24 + call void @__asan_report_store4(i64 %18) + call void asm sideeffect "", ""() + unreachable + +; <label>:30 ; preds = %24, %5 + store i32 %y, i32* %8, align 4 + %31 = ptrtoint i32* %8 to i64, !dbg !13 + %32 = lshr i64 %31, 3, !dbg !13 + %33 = add i64 %32, 2147450880, !dbg !13 + %34 = inttoptr i64 %33 to i8*, !dbg !13 + %35 = load i8* %34, !dbg !13 + %36 = icmp ne i8 %35, 0, !dbg !13 + br i1 %36, label %37, label %43, !dbg !13 + +; <label>:37 ; preds = %30 + %38 = and i64 %31, 7, !dbg !13 + %39 = add i64 %38, 3, !dbg !13 + %40 = trunc i64 %39 to i8, !dbg !13 + %41 = icmp sge i8 %40, %35, !dbg !13 + br i1 %41, label %42, label %43 + +; <label>:42 ; preds = %37 + call void @__asan_report_load4(i64 %31), !dbg !13 + call void asm sideeffect "", ""() + unreachable + +; <label>:43 ; preds = %37, %30 + %44 = load i32* %8, align 4, !dbg !13 + %add = add nsw i32 %44, 2, !dbg !13 + store i64 1172321806, i64* %9, !dbg !13 + %45 = icmp ne i64 %6, %0, !dbg !13 + br i1 %45, label %46, label %53, !dbg !13 + +; <label>:46 ; preds = %43 + %47 = add i64 %15, 0, !dbg !13 + %48 = inttoptr i64 %47 to i64*, !dbg !13 + store i64 -723401728380766731, i64* %48, !dbg !13 + %49 = add i64 %6, 56, !dbg !13 + %50 = inttoptr i64 %49 to i64*, !dbg !13 + %51 = load i64* %50, !dbg !13 + %52 = inttoptr i64 %51 to i8*, !dbg !13 + store i8 0, i8* %52, !dbg !13 + br label %56, !dbg !13 + +; <label>:53 ; preds = %43 + %54 = add i64 %15, 0, !dbg !13 + %55 = inttoptr i64 %54 to i64*, !dbg !13 + store i64 0, i64* %55, !dbg !13 + br label %56, !dbg !13 + +; <label>:56 ; preds = %53, %46 + ret i32 %add, !dbg !13 +} + +; Function Attrs: nounwind readnone +declare void @llvm.dbg.declare(metadata, metadata) #1 + +define internal void @asan.module_ctor() { + call void @__asan_init_v3() + ret void +} + +declare void @__asan_init_v3() + +declare void @__asan_report_load4(i64) + +declare void @__asan_report_store4(i64) + +declare i64 @__asan_stack_malloc_0(i64, i64) + +attributes #0 = { nounwind sanitize_address 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" } +attributes #1 = { nounwind readnone } + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!9, !10} +!llvm.ident = !{!11} + +!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.5.0 (209308)", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/llvm_cmake_gcc/test.cc] [DW_LANG_C_plus_plus] +!1 = metadata !{metadata !"test.cc", metadata !"/llvm_cmake_gcc"} +!2 = metadata !{} +!3 = metadata !{metadata !4} +!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"bar", metadata !"bar", metadata !"_Z3bari", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32)* @_Z3bari, null, null, metadata !2, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [bar] +!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/llvm_cmake_gcc/test.cc] +!6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!7 = metadata !{metadata !8, metadata !8} +!8 = 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] +!9 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} +!10 = metadata !{i32 2, metadata !"Debug Info Version", i32 1} +!11 = metadata !{metadata !"clang version 3.5.0 (209308)"} +!12 = metadata !{i32 786689, metadata !4, metadata !"y", metadata !5, i32 16777217, metadata !8, i32 0, i32 0, metadata !14} ; [ DW_TAG_arg_variable ] [y] [line 1] +!13 = metadata !{i32 2, i32 0, metadata !4, null} +!14 = metadata !{i64 2} diff --git a/test/DebugInfo/X86/debug-loc-offset.ll b/test/DebugInfo/X86/debug-loc-offset.ll index 3f4d39d..7866d0e 100644 --- a/test/DebugInfo/X86/debug-loc-offset.ll +++ b/test/DebugInfo/X86/debug-loc-offset.ll @@ -3,20 +3,23 @@ ; From the code: -; bar.cpp +; debug-loc-offset1.cc ; int bar (int b) { ; return b+4; ; } -; foo.cpp +; debug-loc-offset2.cc ; struct A { -; int a; -; int b; -; int c; +; int var; +; virtual char foo(); ; }; -; int a (struct A var) { -; return var.a; +; void baz(struct A a) { +; int z = 2; +; if (a.var > 2) +; z++; +; if (a.foo() == 'a') +; z++; ; } ; Compiled separately for i386-pc-linux-gnu and linked together. @@ -38,78 +41,113 @@ ; CHECK: DW_TAG_subprogram ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_MIPS_linkage_name [DW_FORM_strp]{{.*}}"_Z1a1A" +; CHECK: DW_AT_MIPS_linkage_name [DW_FORM_strp]{{.*}}"_Z3baz1A" ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name [DW_FORM_strp]{{.*}}"var" +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_location [DW_FORM_sec_offset] (0x00000000) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name [DW_FORM_strp]{{.*}}"a" + +; CHECK: DW_TAG_variable +; CHECK: DW_AT_location [DW_FORM_exprloc] ; CHECK-NOT: DW_AT_location ; CHECK: .debug_loc contents: ; CHECK: 0x00000000: Beginning address offset: 0x0000000000000000 -; CHECK: Ending address offset: 0x0000000000000009 +; CHECK: Ending address offset: 0x000000000000001a - -%struct.A = type { i32, i32, i32 } +%struct.A = type { i32 (...)**, i32 } ; Function Attrs: nounwind define i32 @_Z3bari(i32 %b) #0 { entry: %b.addr = alloca i32, align 4 store i32 %b, i32* %b.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %b.addr}, metadata !25), !dbg !26 - %0 = load i32* %b.addr, align 4, !dbg !27 - %add = add nsw i32 %0, 4, !dbg !27 - ret i32 %add, !dbg !27 + call void @llvm.dbg.declare(metadata !{i32* %b.addr}, metadata !21), !dbg !22 + %0 = load i32* %b.addr, align 4, !dbg !23 + %add = add nsw i32 %0, 4, !dbg !23 + ret i32 %add, !dbg !23 } ; Function Attrs: nounwind readnone declare void @llvm.dbg.declare(metadata, metadata) #1 -; Function Attrs: nounwind -define i32 @_Z1a1A(%struct.A* byval align 4 %var) #0 { +define void @_Z3baz1A(%struct.A* %a) #2 { entry: - call void @llvm.dbg.declare(metadata !{%struct.A* %var}, metadata !28), !dbg !29 - %a = getelementptr inbounds %struct.A* %var, i32 0, i32 0, !dbg !30 - %0 = load i32* %a, align 4, !dbg !30 - ret i32 %0, !dbg !30 + %z = alloca i32, align 4 + call void @llvm.dbg.declare(metadata !{%struct.A* %a}, metadata !24), !dbg !25 + call void @llvm.dbg.declare(metadata !{i32* %z}, metadata !26), !dbg !27 + store i32 2, i32* %z, align 4, !dbg !27 + %var = getelementptr inbounds %struct.A* %a, i32 0, i32 1, !dbg !28 + %0 = load i32* %var, align 4, !dbg !28 + %cmp = icmp sgt i32 %0, 2, !dbg !28 + br i1 %cmp, label %if.then, label %if.end, !dbg !28 + +if.then: ; preds = %entry + %1 = load i32* %z, align 4, !dbg !30 + %inc = add nsw i32 %1, 1, !dbg !30 + store i32 %inc, i32* %z, align 4, !dbg !30 + br label %if.end, !dbg !30 + +if.end: ; preds = %if.then, %entry + %call = call signext i8 @_ZN1A3fooEv(%struct.A* %a), !dbg !31 + %conv = sext i8 %call to i32, !dbg !31 + %cmp1 = icmp eq i32 %conv, 97, !dbg !31 + br i1 %cmp1, label %if.then2, label %if.end4, !dbg !31 + +if.then2: ; preds = %if.end + %2 = load i32* %z, align 4, !dbg !33 + %inc3 = add nsw i32 %2, 1, !dbg !33 + store i32 %inc3, i32* %z, align 4, !dbg !33 + br label %if.end4, !dbg !33 + +if.end4: ; preds = %if.then2, %if.end + ret void, !dbg !34 } +declare signext i8 @_ZN1A3fooEv(%struct.A*) #2 + attributes #0 = { 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" } attributes #1 = { nounwind readnone } +attributes #2 = { "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" } !llvm.dbg.cu = !{!0, !9} -!llvm.module.flags = !{!22, !23} -!llvm.ident = !{!24, !24} +!llvm.module.flags = !{!18, !19} +!llvm.ident = !{!20, !20} -!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.5.0 (trunk 204264) (llvm/trunk 204286)", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} -!1 = metadata !{metadata !"bar.cpp", metadata !"/usr/local/google/home/echristo/tmp"} +!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.5.0 (210479)", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/llvm_cmake_gcc/debug-loc-offset1.cc] [DW_LANG_C_plus_plus] +!1 = metadata !{metadata !"debug-loc-offset1.cc", metadata !"/llvm_cmake_gcc"} !2 = metadata !{} !3 = metadata !{metadata !4} !4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"bar", metadata !"bar", metadata !"_Z3bari", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32)* @_Z3bari, null, null, metadata !2, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [bar] -!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/usr/local/google/home/echristo/tmp/bar.cpp] +!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/llvm_cmake_gcc/debug-loc-offset1.cc] !6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] !7 = metadata !{metadata !8, metadata !8} !8 = 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] -!9 = metadata !{i32 786449, metadata !10, i32 4, metadata !"clang version 3.5.0 (trunk 204264) (llvm/trunk 204286)", i1 false, metadata !"", i32 0, metadata !2, metadata !11, metadata !17, metadata !2, metadata !2, metadata !"", i32 1} -!10 = metadata !{metadata !"foo.cpp", metadata !"/usr/local/google/home/echristo/tmp"} +!9 = metadata !{i32 786449, metadata !10, i32 4, metadata !"clang version 3.5.0 (210479)", i1 false, metadata !"", i32 0, metadata !2, metadata !11, metadata !13, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/llvm_cmake_gcc/debug-loc-offset2.cc] [DW_LANG_C_plus_plus] +!10 = metadata !{metadata !"debug-loc-offset2.cc", metadata !"/llvm_cmake_gcc"} !11 = metadata !{metadata !12} -!12 = metadata !{i32 786451, metadata !10, null, metadata !"A", i32 1, i64 96, i64 32, i32 0, i32 0, null, metadata !13, i32 0, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_structure_type ] [A] [line 1, size 96, align 32, offset 0] [def] [from ] -!13 = metadata !{metadata !14, metadata !15, metadata !16} -!14 = metadata !{i32 786445, metadata !10, metadata !"_ZTS1A", metadata !"a", i32 2, i64 32, i64 32, i64 0, i32 0, metadata !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] -!15 = metadata !{i32 786445, metadata !10, metadata !"_ZTS1A", metadata !"b", i32 3, i64 32, i64 32, i64 32, i32 0, metadata !8} ; [ DW_TAG_member ] [b] [line 3, size 32, align 32, offset 32] [from int] -!16 = metadata !{i32 786445, metadata !10, metadata !"_ZTS1A", metadata !"c", i32 4, i64 32, i64 32, i64 64, i32 0, metadata !8} ; [ DW_TAG_member ] [c] [line 4, size 32, align 32, offset 64] [from int] -!17 = metadata !{metadata !18} -!18 = metadata !{i32 786478, metadata !10, metadata !19, metadata !"a", metadata !"a", metadata !"_Z1a1A", i32 7, metadata !20, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (%struct.A*)* @_Z1a1A, null, null, metadata !2, i32 7} ; [ DW_TAG_subprogram ] [line 7] [def] [a] -!19 = metadata !{i32 786473, metadata !10} ; [ DW_TAG_file_type ] [/usr/local/google/home/echristo/tmp/foo.cpp] -!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 ] -!21 = metadata !{metadata !8, metadata !12} -!22 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} -!23 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} -!24 = metadata !{metadata !"clang version 3.5.0 (trunk 204264) (llvm/trunk 204286)"} -!25 = metadata !{i32 786689, metadata !4, metadata !"b", metadata !5, i32 16777217, metadata !8, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [b] [line 1] -!26 = metadata !{i32 1, i32 0, metadata !4, null} -!27 = metadata !{i32 2, i32 0, metadata !4, null} -!28 = metadata !{i32 786689, metadata !18, metadata !"var", metadata !19, i32 16777223, metadata !"_ZTS1A", i32 0, i32 0} -!29 = metadata !{i32 7, i32 0, metadata !18, null} -!30 = metadata !{i32 8, i32 0, metadata !18, null} ; [ DW_TAG_imported_declaration ] +!12 = metadata !{i32 786451, metadata !10, null, metadata !"A", i32 1, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_structure_type ] [A] [line 1, size 0, align 0, offset 0] [decl] [from ] +!13 = metadata !{metadata !14} +!14 = metadata !{i32 786478, metadata !10, metadata !15, metadata !"baz", metadata !"baz", metadata !"_Z3baz1A", i32 6, metadata !16, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (%struct.A*)* @_Z3baz1A, null, null, metadata !2, i32 6} ; [ DW_TAG_subprogram ] [line 6] [def] [baz] +!15 = metadata !{i32 786473, metadata !10} ; [ DW_TAG_file_type ] [/llvm_cmake_gcc/debug-loc-offset2.cc] +!16 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !17, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!17 = metadata !{null, metadata !12} +!18 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} +!19 = metadata !{i32 2, metadata !"Debug Info Version", i32 1} +!20 = metadata !{metadata !"clang version 3.5.0 (210479)"} +!21 = metadata !{i32 786689, metadata !4, metadata !"b", metadata !5, i32 16777217, metadata !8, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [b] [line 1] +!22 = metadata !{i32 1, i32 0, metadata !4, null} +!23 = metadata !{i32 2, i32 0, metadata !4, null} +!24 = metadata !{i32 786689, metadata !14, metadata !"a", metadata !15, i32 16777222, metadata !"_ZTS1A", i32 8192, i32 0} ; [ DW_TAG_arg_variable ] [a] [line 6] +!25 = metadata !{i32 6, i32 0, metadata !14, null} +!26 = metadata !{i32 786688, metadata !14, metadata !"z", metadata !15, i32 7, metadata !8, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [z] [line 7] +!27 = metadata !{i32 7, i32 0, metadata !14, null} +!28 = metadata !{i32 8, i32 0, metadata !29, null} ; [ DW_TAG_imported_declaration ] +!29 = metadata !{i32 786443, metadata !10, metadata !14, i32 8, i32 0, i32 0, i32 0} ; [ DW_TAG_lexical_block ] [/llvm_cmake_gcc/debug-loc-offset2.cc] +!30 = metadata !{i32 9, i32 0, metadata !29, null} +!31 = metadata !{i32 10, i32 0, metadata !32, null} +!32 = metadata !{i32 786443, metadata !10, metadata !14, i32 10, i32 0, i32 0, i32 1} ; [ DW_TAG_lexical_block ] [/llvm_cmake_gcc/debug-loc-offset2.cc] +!33 = metadata !{i32 11, i32 0, metadata !32, null} +!34 = metadata !{i32 12, i32 0, metadata !14, null} diff --git a/test/DebugInfo/X86/dwarf-public-names.ll b/test/DebugInfo/X86/dwarf-public-names.ll index d870ccb..793971a 100644 --- a/test/DebugInfo/X86/dwarf-public-names.ll +++ b/test/DebugInfo/X86/dwarf-public-names.ll @@ -43,12 +43,14 @@ ; LINUX: debug_pubnames ; Check for each name in the output. -; LINUX: global_namespace_variable -; LINUX: global_namespace_function -; LINUX: static_member_function -; LINUX: global_variable -; LINUX: global_function -; LINUX: member_function +; LINUX-DAG: "ns" +; LINUX-DAG: "C::static_member_function" +; LINUX-DAG: "global_variable" +; LINUX-DAG: "ns::global_namespace_variable" +; LINUX-DAG: "ns::global_namespace_function" +; LINUX-DAG: "global_function" +; LINUX-DAG: "C::static_member_variable" +; LINUX-DAG: "C::member_function" %struct.C = type { i8 } @@ -112,7 +114,7 @@ attributes #1 = { nounwind readnone } !18 = metadata !{i32 786478, metadata !4, null, metadata !"static_member_function", metadata !"static_member_function", metadata !"_ZN1C22static_member_functionEv", i32 13, metadata !15, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_ZN1C22static_member_functionEv, null, metadata !14, metadata !1, i32 13} ; [ DW_TAG_subprogram ] [line 13] [def] [static_member_function] !19 = metadata !{i32 786478, metadata !4, metadata !4, metadata !"global_function", metadata !"global_function", metadata !"_Z15global_functionv", i32 19, metadata !15, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_Z15global_functionv, null, null, metadata !1, i32 19} ; [ DW_TAG_subprogram ] [line 19] [def] [global_function] !20 = metadata !{i32 786478, metadata !4, metadata !21, metadata !"global_namespace_function", metadata !"global_namespace_function", metadata !"_ZN2ns25global_namespace_functionEv", i32 24, metadata !22, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_ZN2ns25global_namespace_functionEv, null, null, metadata !1, i32 24} ; [ DW_TAG_subprogram ] [line 24] [def] [global_namespace_function] -!21 = metadata !{i32 786489, null, metadata !"ns", metadata !4, i32 23} ; [ DW_TAG_namespace ] [/usr2/kparzysz/s.hex/t/dwarf-public-names.cpp] +!21 = metadata !{i32 786489, metadata !4, null, metadata !"ns", i32 23} ; [ DW_TAG_namespace ] [/usr2/kparzysz/s.hex/t/dwarf-public-names.cpp] !22 = metadata !{i32 786453, i32 0, null, i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !23, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] !23 = metadata !{null} !24 = metadata !{metadata !25, metadata !26, metadata !27} diff --git a/test/DebugInfo/X86/elf-names.ll b/test/DebugInfo/X86/elf-names.ll index 176c2af..36fd232 100644 --- a/test/DebugInfo/X86/elf-names.ll +++ b/test/DebugInfo/X86/elf-names.ll @@ -96,14 +96,14 @@ declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone !35 = metadata !{i32 786689, metadata !31, metadata !"d", metadata !6, i32 33554451, metadata !23, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [d] [line 19] !36 = metadata !{i32 12, i32 0, metadata !5, null} !37 = metadata !{i32 13, i32 0, metadata !38, null} -!38 = metadata !{i32 786443, metadata !5, i32 12, i32 0, metadata !6, i32 0} ; [ DW_TAG_lexical_block ] [/usr/local/google/home/echristo/foo.cpp] +!38 = metadata !{i32 786443, metadata !6, metadata !5, i32 12, i32 0, i32 0} ; [ DW_TAG_lexical_block ] [/usr/local/google/home/echristo/foo.cpp] !42 = metadata !{i32 14, i32 0, metadata !38, null} !43 = metadata !{i32 15, i32 0, metadata !38, null} !44 = metadata !{i32 16, i32 0, metadata !38, null} !45 = metadata !{i32 17, i32 0, metadata !38, null} !46 = metadata !{i32 19, i32 0, metadata !31, null} !47 = metadata !{i32 20, i32 0, metadata !48, null} -!48 = metadata !{i32 786443, metadata !31, i32 19, i32 0, metadata !6, i32 1} ; [ DW_TAG_lexical_block ] [/usr/local/google/home/echristo/foo.cpp] +!48 = metadata !{i32 786443, metadata !6, metadata !31, i32 19, i32 0, i32 1} ; [ DW_TAG_lexical_block ] [/usr/local/google/home/echristo/foo.cpp] !49 = metadata !{i32 21, i32 0, metadata !48, null} !50 = metadata !{i32 22, i32 0, metadata !48, null} !51 = metadata !{i32 23, i32 0, metadata !48, null} diff --git a/test/DebugInfo/X86/empty-and-one-elem-array.ll b/test/DebugInfo/X86/empty-and-one-elem-array.ll index 974bd73..f5c37df 100644 --- a/test/DebugInfo/X86/empty-and-one-elem-array.ll +++ b/test/DebugInfo/X86/empty-and-one-elem-array.ll @@ -28,6 +28,11 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; An empty array should not have an AT_upper_bound attribute. But an array of 1 ; should. +; CHECK: DW_TAG_base_type +; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "int") +; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (0x05) +; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1] (0x04) + ; int foo::b[1]: ; CHECK: DW_TAG_structure_type ; CHECK: DW_AT_name{{.*}}"foo" @@ -36,11 +41,6 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "b") ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] -; CHECK: DW_TAG_base_type -; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "int") -; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (0x05) -; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1] (0x04) - ; int[1]: ; CHECK: DW_TAG_array_type [{{.*}}] * ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] diff --git a/test/DebugInfo/X86/fission-ranges.ll b/test/DebugInfo/X86/fission-ranges.ll index 057039c..1358375 100644 --- a/test/DebugInfo/X86/fission-ranges.ll +++ b/test/DebugInfo/X86/fission-ranges.ll @@ -44,6 +44,13 @@ ; Make sure we don't produce any relocations in any .dwo section (though in particular, debug_info.dwo) ; HDR-NOT: .rela.{{.*}}.dwo +; Make sure we have enough stuff in the debug_addr to cover the address indexes +; (6 is the last index in debug_loc.dwo, making 7 entries of 8 bytes each, 7 * 8 +; == 56 base 10 == 38 base 16) + +; HDR: .debug_addr 00000038 +; HDR-NOT: .rela.{{.*}}.dwo + ; From the code: ; extern int c; diff --git a/test/DebugInfo/X86/formal_parameter.ll b/test/DebugInfo/X86/formal_parameter.ll index 3445f46..2fdab7a 100644 --- a/test/DebugInfo/X86/formal_parameter.ll +++ b/test/DebugInfo/X86/formal_parameter.ll @@ -19,7 +19,8 @@ target triple = "x86_64-apple-macosx10.9.0" ; rdar://problem/14874886 ; ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_name {{.*}}map +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}}map ; CHECK-NOT: DW_AT_name {{.*}}map ; Function Attrs: nounwind ssp uwtable diff --git a/test/DebugInfo/X86/generate-odr-hash.ll b/test/DebugInfo/X86/generate-odr-hash.ll index e713f14..2256b3e 100644 --- a/test/DebugInfo/X86/generate-odr-hash.ll +++ b/test/DebugInfo/X86/generate-odr-hash.ll @@ -156,10 +156,10 @@ ; Don't emit pubtype entries for type DIEs in the compile unit that just indirect to a type unit. ; CHECK-NEXT: unit_size = [[CU_SIZE]] ; CHECK-NEXT: Offset Name -; CHECK-NEXT: [[BAR]] "bar" -; CHECK-NEXT: [[WOMBAT]] "wombat" -; CHECK-NEXT: [[FLUFFY]] "echidna::capybara::mongoose::fluffy" -; CHECK-NEXT: [[WALRUS]] "walrus" +; CHECK-DAG: [[BAR]] "bar" +; CHECK-DAG: [[WALRUS]] "(anonymous namespace)::walrus" +; CHECK-DAG: [[WOMBAT]] "wombat" +; CHECK-DAG: [[FLUFFY]] "echidna::capybara::mongoose::fluffy" %struct.bar = type { i8 } %"class.echidna::capybara::mongoose::fluffy" = type { i32, i32 } diff --git a/test/DebugInfo/X86/gnu-public-names.ll b/test/DebugInfo/X86/gnu-public-names.ll index 4e35dbe..96fa52b 100644 --- a/test/DebugInfo/X86/gnu-public-names.ll +++ b/test/DebugInfo/X86/gnu-public-names.ll @@ -1,6 +1,5 @@ ; RUN: llc -mtriple=x86_64-pc-linux-gnu -generate-gnu-dwarf-pub-sections < %s | FileCheck -check-prefix=ASM %s ; RUN: llc -mtriple=x86_64-pc-linux-gnu -generate-gnu-dwarf-pub-sections -filetype=obj < %s | llvm-dwarfdump - | FileCheck %s -; RUN: llc -mtriple=x86_64-pc-linux-gnu -generate-gnu-dwarf-pub-sections -filetype=obj -dwarf-version=3 < %s | llvm-dwarfdump - | FileCheck %s -check-prefix=DWARF3 ; ModuleID = 'dwarf-public-names.cpp' ; ; Generated from: @@ -46,73 +45,135 @@ ; ASM-NEXT: .asciz "C" # External Name ; CHECK: .debug_info contents: -; CHECK: Compile Unit: length = [[UNIT_SIZE:[0-9a-f]+]] +; CHECK: Compile Unit: ; CHECK: DW_AT_GNU_pubnames [DW_FORM_flag_present] (true) ; CHECK-NOT: DW_AT_GNU_pubtypes [ -; CHECK: [[C:[0-9a-f]+]]: DW_TAG_structure_type +; CHECK: [[C:0x[0-9a-f]+]]: DW_TAG_structure_type ; CHECK-NEXT: DW_AT_name {{.*}} "C" -; CHECK: [[STATIC_MEM_DECL:[0-9a-f]+]]: DW_TAG_member +; CHECK: [[STATIC_MEM_DECL:0x[0-9a-f]+]]: DW_TAG_member ; CHECK-NEXT: DW_AT_name {{.*}} "static_member_variable" -; CHECK: [[MEM_FUNC_DECL:[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: [[MEM_FUNC_DECL:0x[0-9a-f]+]]: DW_TAG_subprogram ; CHECK-NEXT: DW_AT_MIPS_linkage_name ; CHECK-NEXT: DW_AT_name {{.*}} "member_function" -; CHECK: [[STATIC_MEM_FUNC_DECL:[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: [[STATIC_MEM_FUNC_DECL:0x[0-9a-f]+]]: DW_TAG_subprogram ; CHECK-NEXT: DW_AT_MIPS_linkage_name ; CHECK-NEXT: DW_AT_name {{.*}} "static_member_function" -; CHECK: [[INT:[0-9a-f]+]]: DW_TAG_base_type +; CHECK: [[INT:0x[0-9a-f]+]]: DW_TAG_base_type ; CHECK-NEXT: DW_AT_name {{.*}} "int" -; CHECK: [[STATIC_MEM_VAR:[0-9a-f]+]]: DW_TAG_variable -; CHECK-NEXT: DW_AT_specification {{.*}}[[STATIC_MEM_DECL]] +; CHECK: [[STATIC_MEM_VAR:0x[0-9a-f]+]]: DW_TAG_variable +; CHECK-NEXT: DW_AT_specification {{.*}} {[[STATIC_MEM_DECL]]} -; CHECK: [[GLOB_VAR:[0-9a-f]+]]: DW_TAG_variable +; CHECK: [[GLOB_VAR:0x[0-9a-f]+]]: DW_TAG_variable ; CHECK-NEXT: DW_AT_name {{.*}} "global_variable" -; CHECK: [[NS:[0-9a-f]+]]: DW_TAG_namespace +; CHECK: [[NS:0x[0-9a-f]+]]: DW_TAG_namespace ; CHECK-NEXT: DW_AT_name {{.*}} "ns" -; CHECK: [[GLOB_NS_VAR_DECL:[0-9a-f]+]]: DW_TAG_variable +; CHECK: [[GLOB_NS_VAR_DECL:0x[0-9a-f]+]]: DW_TAG_variable ; CHECK-NEXT: DW_AT_name {{.*}} "global_namespace_variable" -; CHECK: [[D_VAR_DECL:[0-9a-f]+]]: DW_TAG_variable +; CHECK: [[D_VAR_DECL:0x[0-9a-f]+]]: DW_TAG_variable ; CHECK-NEXT: DW_AT_name {{.*}} "d" -; CHECK: [[D:[0-9a-f]+]]: DW_TAG_structure_type +; CHECK: [[D:0x[0-9a-f]+]]: DW_TAG_structure_type ; CHECK-NEXT: DW_AT_name {{.*}} "D" -; CHECK: [[GLOB_NS_FUNC:[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: [[GLOB_NS_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_MIPS_linkage_name ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name {{.*}} "global_namespace_function" -; CHECK: [[GLOB_NS_VAR:[0-9a-f]+]]: DW_TAG_variable -; CHECK-NEXT: DW_AT_specification {{.*}}[[GLOB_NS_VAR_DECL]] +; CHECK: [[GLOB_NS_VAR:0x[0-9a-f]+]]: DW_TAG_variable +; CHECK-NEXT: DW_AT_specification {{.*}} {[[GLOB_NS_VAR_DECL]]} -; CHECK: [[D_VAR:[0-9a-f]+]]: DW_TAG_variable -; CHECK-NEXT: DW_AT_specification {{.*}}[[D_VAR_DECL]] +; CHECK: [[D_VAR:0x[0-9a-f]+]]: DW_TAG_variable +; CHECK-NEXT: DW_AT_specification {{.*}} {[[D_VAR_DECL]]} -; CHECK: [[MEM_FUNC:[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: DW_TAG_subprogram ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_specification {{.*}}[[MEM_FUNC_DECL]] +; CHECK: DW_AT_name {{.*}} "f3" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[F3_Z:.*]]: DW_TAG_variable +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "z" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_location +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL +; CHECK-NOT: {{DW_TAG|NULL}} + +; CHECK: [[OUTER:.*]]: DW_TAG_namespace +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "outer" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[OUTER_ANON:.*]]: DW_TAG_namespace +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK-NOT: DW_AT_name +; CHECK: [[OUTER_ANON_C_DECL:.*]]: DW_TAG_variable +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "c" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL +; CHECK-NOT: {{DW_TAG|NULL}} +; FIXME: We probably shouldn't bother describing the implicit +; import of the preceding anonymous namespace. This should be fixed +; in clang. +; CHECK: DW_TAG_imported_module +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[OUTER_ANON_C:.*]]: DW_TAG_variable +; CHECK-NOT: DW_TAG +; CHECK-NEXT: DW_AT_specification {{.*}} {[[OUTER_ANON_C_DECL]]} + +; CHECK: [[ANON:.*]]: DW_TAG_namespace +; CHECK-NOT: DW_AT_name +; CHECK: [[ANON_INNER:.*]]: DW_TAG_namespace +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "inner" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[ANON_INNER_B_DECL:.*]]: DW_TAG_variable +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "b" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[ANON_I_DECL:.*]]: DW_TAG_variable +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "i" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[ANON_INNER_B:.*]]: DW_TAG_variable +; CHECK-NOT: DW_TAG +; CHECK-NEXT: DW_AT_specification {{.*}} {[[ANON_INNER_B_DECL]]} +; CHECK: [[ANON_I:.*]]: DW_TAG_variable +; CHECK-NOT: DW_TAG +; CHECK-NEXT: DW_AT_specification {{.*}} {[[ANON_I_DECL]]} + +; CHECK: [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_specification {{.*}} {[[MEM_FUNC_DECL]]} -; CHECK: [[STATIC_MEM_FUNC:[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: [[STATIC_MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_specification {{.*}}[[STATIC_MEM_FUNC_DECL]] +; CHECK: DW_AT_specification {{.*}} {[[STATIC_MEM_FUNC_DECL]]} -; CHECK: [[GLOBAL_FUNC:[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: [[GLOBAL_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_MIPS_linkage_name ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name {{.*}} "global_function" ; CHECK-LABEL: .debug_gnu_pubnames contents: -; CHECK-NEXT: length = 0x000000e7 version = 0x0002 unit_offset = 0x00000000 unit_size = [[UNIT_SIZE]] +; CHECK-NEXT: length = {{.*}} version = 0x0002 unit_offset = 0x00000000 unit_size = {{.*}} ; CHECK-NEXT: Offset Linkage Kind Name ; CHECK-DAG: [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function" ; CHECK-DAG: [[NS]] EXTERNAL TYPE "ns" @@ -123,6 +184,20 @@ ; CHECK-DAG: [[D_VAR]] EXTERNAL VARIABLE "ns::d" ; CHECK-DAG: [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable" ; CHECK-DAG: [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function" +; CHECK-DAG: [[ANON]] EXTERNAL TYPE "(anonymous namespace)" +; CHECK-DAG: [[ANON_INNER]] EXTERNAL TYPE "(anonymous namespace)::inner" +; CHECK-DAG: [[OUTER]] EXTERNAL TYPE "outer" +; CHECK-DAG: [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)" +; CHECK-DAG: [[ANON_I]] STATIC VARIABLE "(anonymous namespace)::i" +; CHECK-DAG: [[ANON_INNER_B]] STATIC VARIABLE "(anonymous namespace)::inner::b" +; CHECK-DAG: [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c" + +; GCC Doesn't put local statics in pubnames, but it seems not unreasonable and +; comes out naturally from LLVM's implementation, so I'm OK with it for now. If +; it's demonstrated that this is a major size concern or degrades debug info +; consumer behavior, feel free to change it. + +; CHECK-DAG: [[F3_Z]] STATIC VARIABLE "f3::z" ; CHECK-LABEL: debug_gnu_pubtypes contents: @@ -131,92 +206,6 @@ ; CHECK-DAG: [[D]] EXTERNAL TYPE "ns::D" ; CHECK-DAG: [[INT]] STATIC TYPE "int" -; DWARF3: .debug_info contents: -; DWARF3: Compile Unit: length = [[UNIT_SIZE:[0-9a-f]+]] -; DWARF3: DW_AT_GNU_pubnames [DW_FORM_flag] (0x01) -; DWARF3-NOT: DW_AT_GNU_pubtypes [ - -; DWARF3: [[C:[0-9a-f]+]]: DW_TAG_structure_type -; DWARF3-NEXT: DW_AT_name {{.*}} "C" - -; DWARF3: [[STATIC_MEM_DECL:[0-9a-f]+]]: DW_TAG_member -; DWARF3-NEXT: DW_AT_name {{.*}} "static_member_variable" - -; DWARF3: [[MEM_FUNC_DECL:[0-9a-f]+]]: DW_TAG_subprogram -; DWARF3-NEXT: DW_AT_MIPS_linkage_name -; DWARF3-NEXT: DW_AT_name {{.*}} "member_function" - -; DWARF3: [[STATIC_MEM_FUNC_DECL:[0-9a-f]+]]: DW_TAG_subprogram -; DWARF3-NEXT: DW_AT_MIPS_linkage_name -; DWARF3-NEXT: DW_AT_name {{.*}} "static_member_function" - -; DWARF3: [[INT:[0-9a-f]+]]: DW_TAG_base_type -; DWARF3-NEXT: DW_AT_name {{.*}} "int" - -; DWARF3: [[STATIC_MEM_VAR:[0-9a-f]+]]: DW_TAG_variable -; DWARF3-NEXT: DW_AT_specification {{.*}}[[STATIC_MEM_DECL]] - -; DWARF3: [[GLOB_VAR:[0-9a-f]+]]: DW_TAG_variable -; DWARF3-NEXT: DW_AT_name {{.*}} "global_variable" - -; DWARF3: [[NS:[0-9a-f]+]]: DW_TAG_namespace -; DWARF3-NEXT: DW_AT_name {{.*}} "ns" - -; DWARF3: [[GLOB_NS_VAR_DECL:[0-9a-f]+]]: DW_TAG_variable -; DWARF3-NEXT: DW_AT_name {{.*}} "global_namespace_variable" - -; DWARF3: [[D_VAR_DECL:[0-9a-f]+]]: DW_TAG_variable -; DWARF3-NEXT: DW_AT_name {{.*}} "d" - -; DWARF3: [[D:[0-9a-f]+]]: DW_TAG_structure_type -; DWARF3-NEXT: DW_AT_name {{.*}} "D" - -; DWARF3: [[GLOB_NS_FUNC:[0-9a-f]+]]: DW_TAG_subprogram -; DWARF3-NOT: DW_TAG -; DWARF3: DW_AT_MIPS_linkage_name -; DWARF3-NOT: DW_TAG -; DWARF3: DW_AT_name {{.*}} "global_namespace_function" - -; DWARF3: [[GLOB_NS_VAR:[0-9a-f]+]]: DW_TAG_variable -; DWARF3-NEXT: DW_AT_specification {{.*}}[[GLOB_NS_VAR_DECL]] - -; DWARF3: [[D_VAR:[0-9a-f]+]]: DW_TAG_variable -; DWARF3-NEXT: DW_AT_specification {{.*}}[[D_VAR_DECL]] - -; DWARF3: [[MEM_FUNC:[0-9a-f]+]]: DW_TAG_subprogram -; DWARF3-NOT: DW_TAG -; DWARF3: DW_AT_specification {{.*}}[[MEM_FUNC_DECL]] - -; DWARF3: [[STATIC_MEM_FUNC:[0-9a-f]+]]: DW_TAG_subprogram -; DWARF3-NOT: DW_TAG -; DWARF3: DW_AT_specification {{.*}}[[STATIC_MEM_FUNC_DECL]] - -; DWARF3: [[GLOBAL_FUNC:[0-9a-f]+]]: DW_TAG_subprogram -; DWARF3-NOT: DW_TAG -; DWARF3: DW_AT_MIPS_linkage_name -; DWARF3-NOT: DW_TAG -; DWARF3: DW_AT_name {{.*}} "global_function" - -; DWARF3-LABEL: .debug_gnu_pubnames contents: -; DWARF3-NEXT: length = 0x000000e7 version = 0x0002 unit_offset = 0x00000000 unit_size = [[UNIT_SIZE]] -; DWARF3-NEXT: Offset Linkage Kind Name -; DWARF3-DAG: [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function" -; DWARF3-DAG: [[NS]] EXTERNAL TYPE "ns" -; DWARF3-DAG: [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function" -; DWARF3-DAG: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable" -; DWARF3-DAG: [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable" -; DWARF3-DAG: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function" -; DWARF3-DAG: [[D_VAR]] EXTERNAL VARIABLE "ns::d" -; DWARF3-DAG: [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable" -; DWARF3-DAG: [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function" - - -; DWARF3-LABEL: debug_gnu_pubtypes contents: -; DWARF3: Offset Linkage Kind Name -; DWARF3-DAG: [[C]] EXTERNAL TYPE "C" -; DWARF3-DAG: [[D]] EXTERNAL TYPE "ns::D" -; DWARF3-DAG: [[INT]] STATIC TYPE "int" - %struct.C = type { i8 } %"struct.ns::D" = type { i32 } @@ -224,16 +213,20 @@ @global_variable = global %struct.C zeroinitializer, align 1 @_ZN2ns25global_namespace_variableE = global i32 1, align 4 @_ZN2ns1dE = global %"struct.ns::D" zeroinitializer, align 4 +@_ZZ2f3vE1z = internal global i32 0, align 4 +@_ZN12_GLOBAL__N_11iE = internal global i32 0, align 4 +@_ZN12_GLOBAL__N_15inner1bE = internal global i32 0, align 4 +@_ZN5outer12_GLOBAL__N_11cE = internal global i32 0, align 4 ; Function Attrs: nounwind uwtable define void @_ZN1C15member_functionEv(%struct.C* %this) #0 align 2 { entry: %this.addr = alloca %struct.C*, align 8 store %struct.C* %this, %struct.C** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%struct.C** %this.addr}, metadata !36), !dbg !38 + call void @llvm.dbg.declare(metadata !{%struct.C** %this.addr}, metadata !50), !dbg !52 %this1 = load %struct.C** %this.addr - store i32 0, i32* @_ZN1C22static_member_variableE, align 4, !dbg !39 - ret void, !dbg !39 + store i32 0, i32* @_ZN1C22static_member_variableE, align 4, !dbg !53 + ret void, !dbg !54 } ; Function Attrs: nounwind readnone @@ -242,72 +235,108 @@ declare void @llvm.dbg.declare(metadata, metadata) #1 ; Function Attrs: nounwind uwtable define i32 @_ZN1C22static_member_functionEv() #0 align 2 { entry: - %0 = load i32* @_ZN1C22static_member_variableE, align 4, !dbg !40 - ret i32 %0, !dbg !40 + %0 = load i32* @_ZN1C22static_member_variableE, align 4, !dbg !55 + ret i32 %0, !dbg !55 } ; Function Attrs: nounwind uwtable define i32 @_Z15global_functionv() #0 { entry: - ret i32 -1, !dbg !41 + ret i32 -1, !dbg !56 } ; Function Attrs: nounwind uwtable define void @_ZN2ns25global_namespace_functionEv() #0 { entry: - call void @_ZN1C15member_functionEv(%struct.C* @global_variable), !dbg !42 - ret void, !dbg !42 + call void @_ZN1C15member_functionEv(%struct.C* @global_variable), !dbg !57 + ret void, !dbg !58 +} + +; Function Attrs: nounwind uwtable +define i32* @_Z2f3v() #0 { +entry: + ret i32* @_ZZ2f3vE1z, !dbg !59 +} + +; Function Attrs: nounwind uwtable +define i32 @_Z2f7v() #0 { +entry: + %0 = load i32* @_ZN12_GLOBAL__N_11iE, align 4, !dbg !60 + %call = call i32* @_Z2f3v(), !dbg !60 + %1 = load i32* %call, align 4, !dbg !60 + %add = add nsw i32 %0, %1, !dbg !60 + %2 = load i32* @_ZN12_GLOBAL__N_15inner1bE, align 4, !dbg !60 + %add1 = add nsw i32 %add, %2, !dbg !60 + %3 = load i32* @_ZN5outer12_GLOBAL__N_11cE, align 4, !dbg !60 + %add2 = add nsw i32 %add1, %3, !dbg !60 + ret i32 %add2, !dbg !60 } 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" } attributes #1 = { nounwind readnone } !llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!34, !43} -!llvm.ident = !{!35} +!llvm.module.flags = !{!47, !48} +!llvm.ident = !{!49} -!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.4 (trunk 192862) (llvm/trunk 192861)", i1 false, metadata !"", i32 0, metadata !2, metadata !3, metadata !21, metadata !29, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [/usr/local/google/home/echristo/tmp/pubnames.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"pubnames.cpp", metadata !"/usr/local/google/home/echristo/tmp"} +!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.5.0 ", i1 false, metadata !"", i32 0, metadata !2, metadata !3, metadata !19, metadata !32, metadata !45, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/tmp/dbginfo/pubnames.cpp] [DW_LANG_C_plus_plus] +!1 = metadata !{metadata !"pubnames.cpp", metadata !"/tmp/dbginfo"} !2 = metadata !{} -!3 = metadata !{metadata !4, metadata !17} +!3 = metadata !{metadata !4, metadata !15} !4 = metadata !{i32 786451, metadata !1, null, metadata !"C", i32 1, i64 8, i64 8, i32 0, i32 0, null, metadata !5, i32 0, null, null, metadata !"_ZTS1C"} ; [ DW_TAG_structure_type ] [C] [line 1, size 8, align 8, offset 0] [def] [from ] -!5 = metadata !{metadata !6, metadata !8, metadata !13} +!5 = metadata !{metadata !6, metadata !8, metadata !12} !6 = metadata !{i32 786445, metadata !1, metadata !"_ZTS1C", metadata !"static_member_variable", i32 4, i64 0, i64 0, i64 0, i32 4096, metadata !7, null} ; [ DW_TAG_member ] [static_member_variable] [line 4, size 0, align 0, offset 0] [static] [from int] !7 = 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] -!8 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"member_function", metadata !"member_function", metadata !"_ZN1C15member_functionEv", i32 2, metadata !9, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 false, null, null, i32 0, metadata !12, i32 2} ; [ DW_TAG_subprogram ] [line 2] [member_function] +!8 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"member_function", metadata !"member_function", metadata !"_ZN1C15member_functionEv", i32 2, metadata !9, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 false, null, null, i32 0, null, i32 2} ; [ DW_TAG_subprogram ] [line 2] [member_function] !9 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !10, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] !10 = metadata !{null, metadata !11} !11 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !"_ZTS1C"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1C] -!12 = metadata !{i32 786468} -!13 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"static_member_function", metadata !"static_member_function", metadata !"_ZN1C22static_member_functionEv", i32 3, metadata !14, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 false, null, null, i32 0, metadata !16, i32 3} ; [ DW_TAG_subprogram ] [line 3] [static_member_function] -!14 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !15, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!15 = metadata !{metadata !7} -!16 = metadata !{i32 786468} -!17 = metadata !{i32 786451, metadata !1, metadata !18, metadata !"D", i32 21, i64 32, i64 32, i32 0, i32 0, null, metadata !19, i32 0, null, null, metadata !"_ZTSN2ns1DE"} ; [ DW_TAG_structure_type ] [D] [line 21, size 32, align 32, offset 0] [def] [from ] -!18 = metadata !{i32 786489, metadata !1, null, metadata !"ns", i32 17} ; [ DW_TAG_namespace ] [ns] [line 17] -!19 = metadata !{metadata !20} -!20 = metadata !{i32 786445, metadata !1, metadata !"_ZTSN2ns1DE", metadata !"A", i32 22, i64 32, i64 32, i64 0, i32 0, metadata !7} ; [ DW_TAG_member ] [A] [line 22, size 32, align 32, offset 0] [from int] -!21 = metadata !{metadata !22, metadata !23, metadata !24, metadata !26} -!22 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"member_function", metadata !"member_function", metadata !"_ZN1C15member_functionEv", i32 9, metadata !9, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (%struct.C*)* @_ZN1C15member_functionEv, null, metadata !8, metadata !2, i32 9} ; [ DW_TAG_subprogram ] [line 9] [def] [member_function] -!23 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"static_member_function", metadata !"static_member_function", metadata !"_ZN1C22static_member_functionEv", i32 11, metadata !14, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_ZN1C22static_member_functionEv, null, metadata !13, metadata !2, i32 11} ; [ DW_TAG_subprogram ] [line 11] [def] [static_member_function] -!24 = metadata !{i32 786478, metadata !1, metadata !25, metadata !"global_function", metadata !"global_function", metadata !"_Z15global_functionv", i32 15, metadata !14, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_Z15global_functionv, null, null, metadata !2, i32 15} ; [ DW_TAG_subprogram ] [line 15] [def] [global_function] -!25 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/usr/local/google/home/echristo/tmp/pubnames.cpp] -!26 = metadata !{i32 786478, metadata !1, metadata !18, metadata !"global_namespace_function", metadata !"global_namespace_function", metadata !"_ZN2ns25global_namespace_functionEv", i32 18, metadata !27, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_ZN2ns25global_namespace_functionEv, null, null, metadata !2, i32 18} ; [ DW_TAG_subprogram ] [line 18] [def] [global_namespace_function] -!27 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !28, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!28 = metadata !{null} -!29 = metadata !{metadata !30, metadata !31, metadata !32, metadata !33} -!30 = metadata !{i32 786484, i32 0, metadata !4, metadata !"static_member_variable", metadata !"static_member_variable", metadata !"_ZN1C22static_member_variableE", metadata !25, i32 7, metadata !7, i32 0, i32 1, i32* @_ZN1C22static_member_variableE, metadata !6} ; [ DW_TAG_variable ] [static_member_variable] [line 7] [def] -!31 = metadata !{i32 786484, i32 0, null, metadata !"global_variable", metadata !"global_variable", metadata !"", metadata !25, i32 13, metadata !4, i32 0, i32 1, %struct.C* @global_variable, null} ; [ DW_TAG_variable ] [global_variable] [line 13] [def] -!32 = metadata !{i32 786484, i32 0, metadata !18, metadata !"global_namespace_variable", metadata !"global_namespace_variable", metadata !"_ZN2ns25global_namespace_variableE", metadata !25, i32 19, metadata !7, i32 0, i32 1, i32* @_ZN2ns25global_namespace_variableE, null} ; [ DW_TAG_variable ] [global_namespace_variable] [line 19] [def] -!33 = metadata !{i32 786484, i32 0, metadata !18, metadata !"d", metadata !"d", metadata !"_ZN2ns1dE", metadata !25, i32 23, metadata !17, i32 0, i32 1, %"struct.ns::D"* @_ZN2ns1dE, null} ; [ DW_TAG_variable ] [d] [line 23] [def] -!34 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} -!35 = metadata !{metadata !"clang version 3.4 (trunk 192862) (llvm/trunk 192861)"} -!36 = metadata !{i32 786689, metadata !22, metadata !"this", null, i32 16777216, metadata !37, i32 1088, i32 0} ; [ DW_TAG_arg_variable ] [this] [line 0] -!37 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !"_ZTS1C"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1C] -!38 = metadata !{i32 0, i32 0, metadata !22, null} -!39 = metadata !{i32 9, i32 0, metadata !22, null} -!40 = metadata !{i32 11, i32 0, metadata !23, null} -!41 = metadata !{i32 15, i32 0, metadata !24, null} -!42 = metadata !{i32 18, i32 0, metadata !26, null} - -!43 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} +!12 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"static_member_function", metadata !"static_member_function", metadata !"_ZN1C22static_member_functionEv", i32 3, metadata !13, i1 false, i1 false, i32 0, i32 0, null, i32 256, i1 false, null, null, i32 0, null, i32 3} ; [ DW_TAG_subprogram ] [line 3] [static_member_function] +!13 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !14, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!14 = metadata !{metadata !7} +!15 = metadata !{i32 786451, metadata !1, metadata !16, metadata !"D", i32 28, i64 32, i64 32, i32 0, i32 0, null, metadata !17, i32 0, null, null, metadata !"_ZTSN2ns1DE"} ; [ DW_TAG_structure_type ] [D] [line 28, size 32, align 32, offset 0] [def] [from ] +!16 = metadata !{i32 786489, metadata !1, null, metadata !"ns", i32 23} ; [ DW_TAG_namespace ] [ns] [line 23] +!17 = metadata !{metadata !18} +!18 = metadata !{i32 786445, metadata !1, metadata !"_ZTSN2ns1DE", metadata !"A", i32 29, i64 32, i64 32, i64 0, i32 0, metadata !7} ; [ DW_TAG_member ] [A] [line 29, size 32, align 32, offset 0] [from int] +!19 = metadata !{metadata !20, metadata !21, metadata !22, metadata !24, metadata !27, metadata !31} +!20 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"member_function", metadata !"member_function", metadata !"_ZN1C15member_functionEv", i32 9, metadata !9, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (%struct.C*)* @_ZN1C15member_functionEv, null, metadata !8, metadata !2, i32 9} ; [ DW_TAG_subprogram ] [line 9] [def] [member_function] +!21 = metadata !{i32 786478, metadata !1, metadata !"_ZTS1C", metadata !"static_member_function", metadata !"static_member_function", metadata !"_ZN1C22static_member_functionEv", i32 13, metadata !13, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_ZN1C22static_member_functionEv, null, metadata !12, metadata !2, i32 13} ; [ DW_TAG_subprogram ] [line 13] [def] [static_member_function] +!22 = metadata !{i32 786478, metadata !1, metadata !23, metadata !"global_function", metadata !"global_function", metadata !"_Z15global_functionv", i32 19, metadata !13, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_Z15global_functionv, null, null, metadata !2, i32 19} ; [ DW_TAG_subprogram ] [line 19] [def] [global_function] +!23 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/tmp/dbginfo/pubnames.cpp] +!24 = metadata !{i32 786478, metadata !1, metadata !16, metadata !"global_namespace_function", metadata !"global_namespace_function", metadata !"_ZN2ns25global_namespace_functionEv", i32 24, metadata !25, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_ZN2ns25global_namespace_functionEv, null, null, metadata !2, i32 24} ; [ DW_TAG_subprogram ] [line 24] [def] [global_namespace_function] +!25 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !26, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!26 = metadata !{null} +!27 = metadata !{i32 786478, metadata !1, metadata !23, metadata !"f3", metadata !"f3", metadata !"_Z2f3v", i32 37, metadata !28, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32* ()* @_Z2f3v, null, null, metadata !2, i32 37} ; [ DW_TAG_subprogram ] [line 37] [def] [f3] +!28 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !29, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!29 = metadata !{metadata !30} +!30 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !7} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from int] +!31 = metadata !{i32 786478, metadata !1, metadata !23, metadata !"f7", metadata !"f7", metadata !"_Z2f7v", i32 54, metadata !13, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_Z2f7v, null, null, metadata !2, i32 54} ; [ DW_TAG_subprogram ] [line 54] [def] [f7] +!32 = metadata !{metadata !33, metadata !34, metadata !35, metadata !36, metadata !37, metadata !38, metadata !41, metadata !44} +!33 = metadata !{i32 786484, i32 0, metadata !4, metadata !"static_member_variable", metadata !"static_member_variable", metadata !"_ZN1C22static_member_variableE", metadata !23, i32 7, metadata !7, i32 0, i32 1, i32* @_ZN1C22static_member_variableE, metadata !6} ; [ DW_TAG_variable ] [static_member_variable] [line 7] [def] +!34 = metadata !{i32 786484, i32 0, null, metadata !"global_variable", metadata !"global_variable", metadata !"", metadata !23, i32 17, metadata !"_ZTS1C", i32 0, i32 1, %struct.C* @global_variable, null} ; [ DW_TAG_variable ] [global_variable] [line 17] [def] +!35 = metadata !{i32 786484, i32 0, metadata !16, metadata !"global_namespace_variable", metadata !"global_namespace_variable", metadata !"_ZN2ns25global_namespace_variableE", metadata !23, i32 27, metadata !7, i32 0, i32 1, i32* @_ZN2ns25global_namespace_variableE, null} ; [ DW_TAG_variable ] [global_namespace_variable] [line 27] [def] +!36 = metadata !{i32 786484, i32 0, metadata !16, metadata !"d", metadata !"d", metadata !"_ZN2ns1dE", metadata !23, i32 30, metadata !"_ZTSN2ns1DE", i32 0, i32 1, %"struct.ns::D"* @_ZN2ns1dE, null} ; [ DW_TAG_variable ] [d] [line 30] [def] +!37 = metadata !{i32 786484, i32 0, metadata !27, metadata !"z", metadata !"z", metadata !"", metadata !23, i32 38, metadata !7, i32 1, i32 1, i32* @_ZZ2f3vE1z, null} ; [ DW_TAG_variable ] [z] [line 38] [local] [def] +!38 = metadata !{i32 786484, i32 0, metadata !39, metadata !"c", metadata !"c", metadata !"_ZN5outer12_GLOBAL__N_11cE", metadata !23, i32 50, metadata !7, i32 1, i32 1, i32* @_ZN5outer12_GLOBAL__N_11cE, null} ; [ DW_TAG_variable ] [c] [line 50] [local] [def] +!39 = metadata !{i32 786489, metadata !1, metadata !40, metadata !"", i32 49} ; [ DW_TAG_namespace ] [line 49] +!40 = metadata !{i32 786489, metadata !1, null, metadata !"outer", i32 48} ; [ DW_TAG_namespace ] [outer] [line 48] +!41 = metadata !{i32 786484, i32 0, metadata !42, metadata !"b", metadata !"b", metadata !"_ZN12_GLOBAL__N_15inner1bE", metadata !23, i32 44, metadata !7, i32 1, i32 1, i32* @_ZN12_GLOBAL__N_15inner1bE, null} ; [ DW_TAG_variable ] [b] [line 44] [local] [def] +!42 = metadata !{i32 786489, metadata !1, metadata !43, metadata !"inner", i32 43} ; [ DW_TAG_namespace ] [inner] [line 43] +!43 = metadata !{i32 786489, metadata !1, null, metadata !"", i32 33} ; [ DW_TAG_namespace ] [line 33] +!44 = metadata !{i32 786484, i32 0, metadata !43, metadata !"i", metadata !"i", metadata !"_ZN12_GLOBAL__N_11iE", metadata !23, i32 34, metadata !7, i32 1, i32 1, i32* @_ZN12_GLOBAL__N_11iE, null} ; [ DW_TAG_variable ] [i] [line 34] [local] [def] +!45 = metadata !{metadata !46} +!46 = metadata !{i32 786490, metadata !40, metadata !39, i32 40} ; [ DW_TAG_imported_module ] +!47 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} +!48 = metadata !{i32 2, metadata !"Debug Info Version", i32 1} +!49 = metadata !{metadata !"clang version 3.5.0 "} +!50 = metadata !{i32 786689, metadata !20, metadata !"this", null, i32 16777216, metadata !51, i32 1088, i32 0} ; [ DW_TAG_arg_variable ] [this] [line 0] +!51 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !"_ZTS1C"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1C] +!52 = metadata !{i32 0, i32 0, metadata !20, null} +!53 = metadata !{i32 10, i32 0, metadata !20, null} +!54 = metadata !{i32 11, i32 0, metadata !20, null} +!55 = metadata !{i32 14, i32 0, metadata !21, null} +!56 = metadata !{i32 20, i32 0, metadata !22, null} +!57 = metadata !{i32 25, i32 0, metadata !24, null} +!58 = metadata !{i32 26, i32 0, metadata !24, null} +!59 = metadata !{i32 39, i32 0, metadata !27, null} +!60 = metadata !{i32 55, i32 0, metadata !31, null} diff --git a/test/DebugInfo/X86/lit.local.cfg b/test/DebugInfo/X86/lit.local.cfg index 19840aa..c8625f4 100644 --- a/test/DebugInfo/X86/lit.local.cfg +++ b/test/DebugInfo/X86/lit.local.cfg @@ -1,3 +1,2 @@ -targets = set(config.root.targets_to_build.split()) -if not 'X86' in targets: +if not 'X86' in config.root.targets: config.unsupported = True diff --git a/test/DebugInfo/X86/misched-dbg-value.ll b/test/DebugInfo/X86/misched-dbg-value.ll index 478f221..c713e65 100644 --- a/test/DebugInfo/X86/misched-dbg-value.ll +++ b/test/DebugInfo/X86/misched-dbg-value.ll @@ -6,20 +6,33 @@ ; function parameters. ; CHECK: .debug_info contents: ; CHECK: DW_TAG_compile_unit -; CHECK: DW_TAG_subprogram -; CHECK: Proc8 -; CHECK: DW_TAG_formal_parameter -; CHECK: Array1Par -; CHECK: DW_AT_location -; CHECK: DW_TAG_formal_parameter -; CHECK: Array2Par -; CHECK: DW_AT_location -; CHECK: DW_TAG_formal_parameter -; CHECK: IntParI1 -; CHECK: DW_AT_location -; CHECK: DW_TAG_formal_parameter -; CHECK: IntParI2 -; CHECK: DW_AT_location +; CHECK: DW_TAG_subprogram +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "Proc8" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "Array1Par" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "Array2Par" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "IntParI1" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_location +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "IntParI2" %struct.Record = type { %struct.Record*, i32, i32, i32, [31 x i8] } diff --git a/test/DebugInfo/X86/op_deref.ll b/test/DebugInfo/X86/op_deref.ll index 810ebbc..31003ee 100644 --- a/test/DebugInfo/X86/op_deref.ll +++ b/test/DebugInfo/X86/op_deref.ll @@ -1,18 +1,21 @@ -; RUN: llc -O0 -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj -; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DW-CHECK -; RUN: llc -O0 -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj -dwarf-version=3 -; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DWARF3 +; RUN: llc -O0 -mtriple=x86_64-apple-darwin < %s -filetype=obj \ +; RUN: | llvm-dwarfdump -debug-dump=info - \ +; RUN: | FileCheck %s -check-prefix=CHECK -check-prefix=DWARF4 +; RUN: llc -O0 -mtriple=x86_64-apple-darwin < %s -filetype=obj -dwarf-version=3 \ +; RUN: | llvm-dwarfdump -debug-dump=info - \ +; RUN: | FileCheck %s -check-prefix=CHECK -check-prefix=DWARF3 -; DW-CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000067] = "vla") ; FIXME: The location here needs to be fixed, but llvm-dwarfdump doesn't handle ; DW_AT_location lists yet. -; DW-CHECK: DW_AT_location [DW_FORM_sec_offset] (0x00000000) +; DWARF4: DW_AT_location [DW_FORM_sec_offset] (0x00000000) -; DWARF3: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000067] = "vla") ; FIXME: The location here needs to be fixed, but llvm-dwarfdump doesn't handle ; DW_AT_location lists yet. ; DWARF3: DW_AT_location [DW_FORM_data4] (0x00000000) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000067] = "vla") + ; Unfortunately llvm-dwarfdump can't unparse a list of DW_AT_locations ; right now, so we check the asm output: ; RUN: llc -O0 -mtriple=x86_64-apple-darwin %s -o - -filetype=asm | FileCheck %s -check-prefix=ASM-CHECK @@ -86,7 +89,7 @@ declare void @llvm.stackrestore(i8*) nounwind !11 = metadata !{i32 1, i32 26, metadata !5, null} !12 = metadata !{i32 3, i32 13, metadata !13, null} !13 = metadata !{i32 786443, metadata !28, metadata !5, i32 2, i32 1, i32 0} ; [ DW_TAG_lexical_block ] -!14 = metadata !{i32 786688, metadata !13, metadata !"vla", metadata !6, i32 3, metadata !15, i32 8192, i32 0, i64 2} ; [ DW_TAG_auto_variable ] +!14 = metadata !{i32 786688, metadata !13, metadata !"vla", metadata !6, i32 3, metadata !15, i32 8192, i32 0, metadata !30} ; [ DW_TAG_auto_variable ] !15 = metadata !{i32 786433, null, null, metadata !"", i32 0, i64 0, i64 32, i32 0, i32 0, metadata !9, metadata !16, i32 0, null, null, null} ; [ DW_TAG_array_type ] [line 0, size 0, align 32, offset 0] [from int] !16 = metadata !{metadata !17} !17 = metadata !{i32 786465, i64 0, i64 -1} ; [ DW_TAG_subrange_type ] @@ -102,3 +105,4 @@ declare void @llvm.stackrestore(i8*) nounwind !27 = metadata !{i32 8, i32 1, metadata !13, null} !28 = metadata !{metadata !"bar.c", metadata !"/Users/echristo/tmp"} !29 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} +!30 = metadata !{i64 2} diff --git a/test/DebugInfo/X86/parameters.ll b/test/DebugInfo/X86/parameters.ll index 8248cf6..4215c21 100644 --- a/test/DebugInfo/X86/parameters.ll +++ b/test/DebugInfo/X86/parameters.ll @@ -23,13 +23,15 @@ ; } ; CHECK: debug_info contents -; CHECK: DW_AT_name{{.*}} = "f" ; 0x74 is DW_OP_breg4, showing that the parameter is accessed indirectly ; (with a zero offset) from the register parameter ; CHECK: DW_AT_location{{.*}}(<0x0{{.}}> 74 00 +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}} = "f" -; CHECK: DW_AT_name{{.*}} = "g" ; CHECK: DW_AT_location{{.*}}([[G_LOC:0x[0-9]*]]) +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name{{.*}} = "g" ; CHECK: debug_loc contents ; CHECK-NEXT: [[G_LOC]]: Beginning ; CHECK-NEXT: Ending diff --git a/test/DebugInfo/X86/pr12831.ll b/test/DebugInfo/X86/pr12831.ll index 117e426..79d00ed 100644 --- a/test/DebugInfo/X86/pr12831.ll +++ b/test/DebugInfo/X86/pr12831.ll @@ -212,7 +212,7 @@ entry: !134 = metadata !{i32 786447, null, null, null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !10} ; [ DW_TAG_pointer_type ] !135 = metadata !{i32 19, i32 39, metadata !5, null} !136 = metadata !{i32 20, i32 17, metadata !137, null} -!137 = metadata !{i32 786443, metadata !5, i32 19, i32 51, metadata !6, i32 0} ; [ DW_TAG_lexical_block ] +!137 = metadata !{i32 786443, metadata !6, metadata !5, i32 19, i32 51, i32 0} ; [ DW_TAG_lexical_block ] !138 = metadata !{i32 23, i32 17, metadata !137, null} !139 = metadata !{i32 26, i32 15, metadata !137, null} !140 = metadata !{i32 786689, metadata !106, metadata !"this", metadata !6, i32 16777224, metadata !141, i32 64, i32 0} ; [ DW_TAG_arg_variable ] @@ -221,19 +221,19 @@ entry: !143 = metadata !{i32 786689, metadata !106, metadata !"__f", metadata !6, i32 33554440, metadata !61, i32 0, i32 0} ; [ DW_TAG_arg_variable ] !144 = metadata !{i32 8, i32 63, metadata !106, null} !145 = metadata !{i32 9, i32 9, metadata !146, null} -!146 = metadata !{i32 786443, metadata !106, i32 8, i32 81, metadata !6, i32 1} ; [ DW_TAG_lexical_block ] +!146 = metadata !{i32 786443, metadata !6, metadata !106, i32 8, i32 81, i32 1} ; [ DW_TAG_lexical_block ] !147 = metadata !{i32 10, i32 13, metadata !146, null} !148 = metadata !{i32 4, i32 5, metadata !149, null} -!149 = metadata !{i32 786443, metadata !107, i32 3, i32 105, metadata !6, i32 2} ; [ DW_TAG_lexical_block ] +!149 = metadata !{i32 786443, metadata !6, metadata !107, i32 3, i32 105, i32 2} ; [ DW_TAG_lexical_block ] !150 = metadata !{i32 786689, metadata !126, metadata !"this", metadata !6, i32 16777224, metadata !141, i32 64, i32 0} ; [ DW_TAG_arg_variable ] !151 = metadata !{i32 8, i32 45, metadata !126, null} !152 = metadata !{i32 786689, metadata !126, metadata !"__f", metadata !6, i32 33554440, metadata !26, i32 0, i32 0} ; [ DW_TAG_arg_variable ] !153 = metadata !{i32 8, i32 63, metadata !126, null} !154 = metadata !{i32 9, i32 9, metadata !155, null} -!155 = metadata !{i32 786443, metadata !126, i32 8, i32 81, metadata !6, i32 3} ; [ DW_TAG_lexical_block ] +!155 = metadata !{i32 786443, metadata !6, metadata !126, i32 8, i32 81, i32 3} ; [ DW_TAG_lexical_block ] !156 = metadata !{i32 10, i32 13, metadata !155, null} !157 = metadata !{i32 4, i32 5, metadata !158, null} -!158 = metadata !{i32 786443, metadata !127, i32 3, i32 105, metadata !6, i32 4} ; [ DW_TAG_lexical_block ] +!158 = metadata !{i32 786443, metadata !6, metadata !127, i32 3, i32 105, i32 4} ; [ DW_TAG_lexical_block ] !159 = metadata !{i32 786473, metadata !161} ; [ DW_TAG_file_type ] !160 = metadata !{metadata !"BPLFunctionWriter2.ii", metadata !"/home/peter/crashdelta"} !161 = metadata !{metadata !"BPLFunctionWriter.cpp", metadata !"/home/peter/crashdelta"} diff --git a/test/DebugInfo/X86/pr19307.ll b/test/DebugInfo/X86/pr19307.ll new file mode 100644 index 0000000..07e3a42 --- /dev/null +++ b/test/DebugInfo/X86/pr19307.ll @@ -0,0 +1,147 @@ +; RUN: llc -O0 -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s + +; Generated from the source file pr19307.cc: +; #include <string> +; void parse_range(unsigned long long &offset, unsigned long long &limit, +; std::string range) { +; if (range.compare(0, 6, "items=") != 0 || range[6] == '-') +; offset = 1; +; range.erase(0, 6); +; limit = 2; +; } +; with "clang++ -S -emit-llvm -O0 -g pr19307.cc" + +; Location of "range" string is spilled from %rdx to stack and is +; addressed via %rbp. +; CHECK: movq %rdx, {{[-0-9]+}}(%rbp) +; CHECK-NEXT: [[START_LABEL:.Ltmp[0-9]+]] +; This location should be valid until the end of the function. + +; Verify that we have proper range in debug_loc section: +; CHECK: .Ldebug_loc{{[0-9]+}}: +; CHECK: DW_OP_breg1 +; CHECK: .Lset{{[0-9]+}} = [[START_LABEL]]-.Lfunc_begin0 +; CHECK-NEXT: .quad .Lset{{[0-9]+}} +; CHECK-NEXT: .Lset{{[0-9]+}} = .Lfunc_end0-.Lfunc_begin0 +; CHECK-NEXT: .quad .Lset{{[0-9]+}} +; CHECK: DW_OP_breg6 +; CHECK: DW_OP_deref + +; ModuleID = 'pr19307.cc' +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +%"class.std::basic_string" = type { %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider" } +%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider" = type { i8* } + +@.str = private unnamed_addr constant [7 x i8] c"items=\00", align 1 + +; Function Attrs: uwtable +define void @_Z11parse_rangeRyS_Ss(i64* %offset, i64* %limit, %"class.std::basic_string"* %range) #0 { +entry: + %offset.addr = alloca i64*, align 8 + %limit.addr = alloca i64*, align 8 + store i64* %offset, i64** %offset.addr, align 8 + call void @llvm.dbg.declare(metadata !{i64** %offset.addr}, metadata !45), !dbg !46 + store i64* %limit, i64** %limit.addr, align 8 + call void @llvm.dbg.declare(metadata !{i64** %limit.addr}, metadata !47), !dbg !46 + call void @llvm.dbg.declare(metadata !{%"class.std::basic_string"* %range}, metadata !48), !dbg !49 + %call = call i32 @_ZNKSs7compareEmmPKc(%"class.std::basic_string"* %range, i64 0, i64 6, i8* getelementptr inbounds ([7 x i8]* @.str, i32 0, i32 0)), !dbg !50 + %cmp = icmp ne i32 %call, 0, !dbg !50 + br i1 %cmp, label %if.then, label %lor.lhs.false, !dbg !50 + +lor.lhs.false: ; preds = %entry + %call1 = call i8* @_ZNSsixEm(%"class.std::basic_string"* %range, i64 6), !dbg !52 + %0 = load i8* %call1, !dbg !52 + %conv = sext i8 %0 to i32, !dbg !52 + %cmp2 = icmp eq i32 %conv, 45, !dbg !52 + br i1 %cmp2, label %if.then, label %if.end, !dbg !52 + +if.then: ; preds = %lor.lhs.false, %entry + %1 = load i64** %offset.addr, align 8, !dbg !54 + store i64 1, i64* %1, align 8, !dbg !54 + br label %if.end, !dbg !54 + +if.end: ; preds = %if.then, %lor.lhs.false + %call3 = call %"class.std::basic_string"* @_ZNSs5eraseEmm(%"class.std::basic_string"* %range, i64 0, i64 6), !dbg !55 + %2 = load i64** %limit.addr, align 8, !dbg !56 + store i64 2, i64* %2, align 8, !dbg !56 + ret void, !dbg !57 +} + +; Function Attrs: nounwind readnone +declare void @llvm.dbg.declare(metadata, metadata) #1 + +declare i32 @_ZNKSs7compareEmmPKc(%"class.std::basic_string"*, i64, i64, i8*) #2 + +declare i8* @_ZNSsixEm(%"class.std::basic_string"*, i64) #2 + +declare %"class.std::basic_string"* @_ZNSs5eraseEmm(%"class.std::basic_string"*, i64, i64) #2 + +attributes #0 = { 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" } +attributes #1 = { nounwind readnone } +attributes #2 = { "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" } + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!42, !43} +!llvm.ident = !{!44} + +!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.5.0 (209308)", i1 false, metadata !"", i32 0, metadata !2, metadata !3, metadata !12, metadata !2, metadata !21, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/llvm_cmake_gcc/pr19307.cc] [DW_LANG_C_plus_plus] +!1 = metadata !{metadata !"pr19307.cc", metadata !"/llvm_cmake_gcc"} +!2 = metadata !{} +!3 = metadata !{metadata !4, metadata !6, metadata !8} +!4 = metadata !{i32 786451, metadata !5, null, metadata !"", i32 83, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null, metadata !"_ZTS11__mbstate_t"} ; [ DW_TAG_structure_type ] [line 83, size 0, align 0, offset 0] [decl] [from ] +!5 = metadata !{metadata !"/usr/include/wchar.h", metadata !"/llvm_cmake_gcc"} +!6 = metadata !{i32 786451, metadata !7, null, metadata !"lconv", i32 54, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null, metadata !"_ZTS5lconv"} ; [ DW_TAG_structure_type ] [lconv] [line 54, size 0, align 0, offset 0] [decl] [from ] +!7 = metadata !{metadata !"/usr/include/locale.h", metadata !"/llvm_cmake_gcc"} +!8 = metadata !{i32 786434, metadata !9, metadata !10, metadata !"basic_string<char, std::char_traits<char>, std::allocator<char> >", i32 1134, i64 0, i64 0, i32 0, i32 4, null, null, i32 0, null, null, metadata !"_ZTSSs"} ; [ DW_TAG_class_type ] [basic_string<char, std::char_traits<char>, std::allocator<char> >] [line 1134, size 0, align 0, offset 0] [decl] [from ] +!9 = metadata !{metadata !"/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/basic_string.tcc", metadata !"/llvm_cmake_gcc"} +!10 = metadata !{i32 786489, metadata !11, null, metadata !"std", i32 153} ; [ DW_TAG_namespace ] [std] [line 153] +!11 = metadata !{metadata !"/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/x86_64-linux-gnu/bits/c++config.h", metadata !"/llvm_cmake_gcc"} +!12 = metadata !{metadata !13} +!13 = metadata !{i32 786478, metadata !1, metadata !14, metadata !"parse_range", metadata !"parse_range", metadata !"_Z11parse_rangeRyS_Ss", i32 3, metadata !15, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (i64*, i64*, %"class.std::basic_string"*)* @_Z11parse_rangeRyS_Ss, null, null, metadata !2, i32 4} ; [ DW_TAG_subprogram ] [line 3] [def] [scope 4] [parse_range] +!14 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/llvm_cmake_gcc/pr19307.cc] +!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 ] +!16 = metadata !{null, metadata !17, metadata !17, metadata !19} +!17 = metadata !{i32 786448, null, null, null, i32 0, i64 0, i64 0, i64 0, i32 0, metadata !18} ; [ DW_TAG_reference_type ] [line 0, size 0, align 0, offset 0] [from long long unsigned int] +!18 = metadata !{i32 786468, null, null, metadata !"long long unsigned int", i32 0, i64 64, i64 64, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ] [long long unsigned int] [line 0, size 64, align 64, offset 0, enc DW_ATE_unsigned] +!19 = metadata !{i32 786454, metadata !20, metadata !10, metadata !"string", i32 65, i64 0, i64 0, i64 0, i32 0, metadata !"_ZTSSs"} ; [ DW_TAG_typedef ] [string] [line 65, size 0, align 0, offset 0] [from _ZTSSs] +!20 = metadata !{metadata !"/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/stringfwd.h", metadata !"/llvm_cmake_gcc"} +!21 = metadata !{metadata !22, metadata !26, metadata !29, metadata !33, metadata !38, metadata !41} +!22 = metadata !{i32 786490, metadata !23, metadata !25, i32 57} ; [ DW_TAG_imported_module ] +!23 = metadata !{i32 786489, metadata !24, null, metadata !"__gnu_debug", i32 55} ; [ DW_TAG_namespace ] [__gnu_debug] [line 55] +!24 = metadata !{metadata !"/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/debug/debug.h", metadata !"/llvm_cmake_gcc"} +!25 = metadata !{i32 786489, metadata !24, metadata !10, metadata !"__debug", i32 49} ; [ DW_TAG_namespace ] [__debug] [line 49] +!26 = metadata !{i32 786440, metadata !10, metadata !27, i32 66} ; [ DW_TAG_imported_declaration ] +!27 = metadata !{i32 786454, metadata !5, null, metadata !"mbstate_t", i32 106, i64 0, i64 0, i64 0, i32 0, metadata !28} ; [ DW_TAG_typedef ] [mbstate_t] [line 106, size 0, align 0, offset 0] [from __mbstate_t] +!28 = metadata !{i32 786454, metadata !5, null, metadata !"__mbstate_t", i32 95, i64 0, i64 0, i64 0, i32 0, metadata !"_ZTS11__mbstate_t"} ; [ DW_TAG_typedef ] [__mbstate_t] [line 95, size 0, align 0, offset 0] [from _ZTS11__mbstate_t] +!29 = metadata !{i32 786440, metadata !10, metadata !30, i32 141} ; [ DW_TAG_imported_declaration ] +!30 = metadata !{i32 786454, metadata !31, null, metadata !"wint_t", i32 141, i64 0, i64 0, i64 0, i32 0, metadata !32} ; [ DW_TAG_typedef ] [wint_t] [line 141, size 0, align 0, offset 0] [from unsigned int] +!31 = metadata !{metadata !"/llvm_cmake_gcc/bin/../lib/clang/3.5.0/include/stddef.h", metadata !"/llvm_cmake_gcc"} +!32 = metadata !{i32 786468, null, null, metadata !"unsigned int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ] [unsigned int] [line 0, size 32, align 32, offset 0, enc DW_ATE_unsigned] +!33 = metadata !{i32 786440, metadata !34, metadata !36, i32 42} ; [ DW_TAG_imported_declaration ] +!34 = metadata !{i32 786489, metadata !35, null, metadata !"__gnu_cxx", i32 69} ; [ DW_TAG_namespace ] [__gnu_cxx] [line 69] +!35 = metadata !{metadata !"/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/cpp_type_traits.h", metadata !"/llvm_cmake_gcc"} +!36 = metadata !{i32 786454, metadata !11, metadata !10, metadata !"size_t", i32 155, i64 0, i64 0, i64 0, i32 0, metadata !37} ; [ DW_TAG_typedef ] [size_t] [line 155, size 0, align 0, offset 0] [from long unsigned int] +!37 = metadata !{i32 786468, null, null, metadata !"long unsigned int", i32 0, i64 64, i64 64, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ] [long unsigned int] [line 0, size 64, align 64, offset 0, enc DW_ATE_unsigned] +!38 = metadata !{i32 786440, metadata !34, metadata !39, i32 43} ; [ DW_TAG_imported_declaration ] +!39 = metadata !{i32 786454, metadata !11, metadata !10, metadata !"ptrdiff_t", i32 156, i64 0, i64 0, i64 0, i32 0, metadata !40} ; [ DW_TAG_typedef ] [ptrdiff_t] [line 156, size 0, align 0, offset 0] [from long int] +!40 = metadata !{i32 786468, null, null, metadata !"long int", i32 0, i64 64, i64 64, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [long int] [line 0, size 64, align 64, offset 0, enc DW_ATE_signed] +!41 = metadata !{i32 786440, metadata !10, metadata !"_ZTS5lconv", i32 55} ; [ DW_TAG_imported_declaration ] +!42 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} +!43 = metadata !{i32 2, metadata !"Debug Info Version", i32 1} +!44 = metadata !{metadata !"clang version 3.5.0 (209308)"} +!45 = metadata !{i32 786689, metadata !13, metadata !"offset", metadata !14, i32 16777219, metadata !17, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [offset] [line 3] +!46 = metadata !{i32 3, i32 0, metadata !13, null} +!47 = metadata !{i32 786689, metadata !13, metadata !"limit", metadata !14, i32 33554435, metadata !17, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [limit] [line 3] +!48 = metadata !{i32 786689, metadata !13, metadata !"range", metadata !14, i32 50331652, metadata !19, i32 8192, i32 0} ; [ DW_TAG_arg_variable ] [range] [line 4] +!49 = metadata !{i32 4, i32 0, metadata !13, null} +!50 = metadata !{i32 5, i32 0, metadata !51, null} +!51 = metadata !{i32 786443, metadata !1, metadata !13, i32 5, i32 0, i32 0, i32 0} ; [ DW_TAG_lexical_block ] [/llvm_cmake_gcc/pr19307.cc] +!52 = metadata !{i32 5, i32 0, metadata !53, null} +!53 = metadata !{i32 786443, metadata !1, metadata !51, i32 5, i32 0, i32 1, i32 1} ; [ DW_TAG_lexical_block ] [/llvm_cmake_gcc/pr19307.cc] +!54 = metadata !{i32 6, i32 0, metadata !51, null} +!55 = metadata !{i32 7, i32 0, metadata !13, null} +!56 = metadata !{i32 8, i32 0, metadata !13, null} ; [ DW_TAG_imported_declaration ] +!57 = metadata !{i32 9, i32 0, metadata !13, null} + diff --git a/test/DebugInfo/X86/sret.ll b/test/DebugInfo/X86/sret.ll index fed4334..faf5158 100644 --- a/test/DebugInfo/X86/sret.ll +++ b/test/DebugInfo/X86/sret.ll @@ -3,8 +3,8 @@ ; Based on the debuginfo-tests/sret.cpp code. -; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x72aabf538392d298) -; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x72aabf538392d298) +; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x5b59949640ec1580) +; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x5b59949640ec1580) %class.A = type { i32 (...)**, i32 } %class.B = type { i8 } diff --git a/test/DebugInfo/X86/subregisters.ll b/test/DebugInfo/X86/subregisters.ll index 738ab02..d46a95f 100644 --- a/test/DebugInfo/X86/subregisters.ll +++ b/test/DebugInfo/X86/subregisters.ll @@ -6,8 +6,8 @@ ; ; rdar://problem/16015314 ; +; CHECK: DW_AT_location [DW_FORM_block1] (<0x03> 54 93 04 ) ; CHECK: DW_AT_name [DW_FORM_strp]{{.*}} "a" -; CHECK: DW_AT_location [DW_FORM_block1] (<0x03> 54 93 04 ) ; ; struct bar { ; int a; |