mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
522b6db8c9
In some senario, LLVM will remove llvm.dbg.labels in IR. For example, when the labels are in unreachable blocks, these labels will not be generated in LLVM IR. In the case, these debug labels will have address zero as their address. It is not legal address for debugger to set breakpoints or query sources. So, the patch inhibits the address info (DW_AT_low_pc) of removed labels. Fix build failed in BuildBot, clang-stage1-cmake-RA-incremental, on macOS. Differential Revision: https://reviews.llvm.org/D51908 llvm-svn: 343062
40 lines
1.5 KiB
LLVM
40 lines
1.5 KiB
LLVM
; Test unreachable llvm.dbg.label
|
|
;
|
|
; RUN: llc -filetype=obj -split-dwarf-file debug.dwo -mtriple=x86_64-unknown-linux-gnu -o - %s | llvm-dwarfdump -v - | FileCheck %s
|
|
;
|
|
; CHECK: .debug_info.dwo contents:
|
|
; CHECK: DW_TAG_label
|
|
; CHECK-NEXT: DW_AT_name {{.*}}"done"
|
|
; CHECK-NOT: {{DW_TAG|NULL}}
|
|
; CHECK: DW_AT_low_pc
|
|
; CHECK: DW_TAG_label
|
|
; CHECK-NEXT: DW_AT_name {{.*}}"removed"
|
|
; CHECK-NOT: DW_AT_low_pc
|
|
source_filename = "debug-label-unreached.c"
|
|
|
|
define dso_local i32 @foo(i32 %a, i32 %b) !dbg !8 {
|
|
entry:
|
|
%sum = add nsw i32 %a, %b, !dbg !12
|
|
call void @llvm.dbg.label(metadata !11), !dbg !12
|
|
ret i32 %sum, !dbg !13
|
|
}
|
|
|
|
declare void @llvm.dbg.label(metadata)
|
|
|
|
!llvm.dbg.cu = !{!0}
|
|
!llvm.module.flags = !{!4}
|
|
|
|
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: true, emissionKind: FullDebug, enums: !2)
|
|
!1 = !DIFile(filename: "debug-label-unreached.c", directory: "./")
|
|
!2 = !{}
|
|
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!5 = !DISubroutineType(types: !6)
|
|
!6 = !{!7}
|
|
!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
|
!8 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !9)
|
|
!9 = !{!10, !11}
|
|
!10 = !DILabel(scope: !8, name: "removed", file: !1, line: 11)
|
|
!11 = !DILabel(scope: !8, name: "done", file: !1, line: 13)
|
|
!12 = !DILocation(line: 13, column: 1, scope: !8)
|
|
!13 = !DILocation(line: 14, column: 5, scope: !8)
|