mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
23c2febb59
For Swift we would like to be able to encode the error types that a function may throw, so the debugger can display them alongside the function's return value when finish-ing a function. DWARF defines DW_TAG_thrown_type (intended to be used for C++ throw() declarations) that is a perfect fit for this purpose. This patch wires up support for DW_TAG_thrown_type in LLVM by adding a list of thrown types to DISubprogram. To offset the cost of the extra pointer, there is a follow-up patch that turns DISubprogram into a variable-length node. rdar://problem/29481673 Differential Revision: https://reviews.llvm.org/D32559 llvm-svn: 301489
23 lines
821 B
LLVM
23 lines
821 B
LLVM
; RUN: not opt -S <%s 2>&1| FileCheck %s
|
|
|
|
define void @f() !dbg !14 {
|
|
ret void
|
|
}
|
|
|
|
!0 = !{null}
|
|
!1 = distinct !DICompositeType(tag: DW_TAG_structure_type)
|
|
!2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
|
|
!3 = !DISubroutineType(types: !0)
|
|
!4 = distinct !DICompositeType(tag: DW_TAG_structure_type)
|
|
!8 = distinct !DICompileUnit(language: DW_LANG_Swift, producer: "clang",
|
|
file: !2, emissionKind: 2)
|
|
; CHECK: invalid thrown type
|
|
!13 = !{!14}
|
|
!14 = distinct !DISubprogram(name: "f", scope: !1,
|
|
file: !2, line: 1, type: !3, isLocal: true,
|
|
isDefinition: true, scopeLine: 2,
|
|
unit: !8, thrownTypes: !13)
|
|
!15 = !{i32 1, !"Debug Info Version", i32 3}
|
|
!llvm.module.flags = !{!15}
|
|
!llvm.dbg.cu = !{!8}
|