diff options
author | Adrian Prantl <aprantl@apple.com> | 2017-04-26 22:56:44 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2017-04-26 22:56:44 +0000 |
commit | 1bf6297ee851658922ea3d7c31fe14b6a41d746d (patch) | |
tree | fa6ef9325d7e0cad4662c1dbe1321c8dd226de47 /test/Verifier | |
parent | 2db23b3bbe96288e750a0b88bb50896ae36065f7 (diff) |
Add support for DW_TAG_thrown_type.
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301489 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Verifier')
-rw-r--r-- | test/Verifier/DISubprogram.ll | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/Verifier/DISubprogram.ll b/test/Verifier/DISubprogram.ll new file mode 100644 index 000000000000..e78220c8bd78 --- /dev/null +++ b/test/Verifier/DISubprogram.ll @@ -0,0 +1,22 @@ +; 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} |