Add support for DW_TAG_thrown_type.
authorAdrian Prantl <aprantl@apple.com>
Wed, 26 Apr 2017 22:56:44 +0000 (22:56 +0000)
committerAdrian Prantl <aprantl@apple.com>
Wed, 26 Apr 2017 22:56:44 +0000 (22:56 +0000)
commit1d12b885b09a92d268356292c2829a2a6b4aca1d
tree0760cd6360c18db743eec53ff0ae6d3c0739796d
parent330e52b0187c6700d3761f4f704c44fc3c785acb
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

llvm-svn: 301489
17 files changed:
llvm/include/llvm/IR/DIBuilder.h
llvm/include/llvm/IR/DebugInfoMetadata.h
llvm/lib/AsmParser/LLParser.cpp
llvm/lib/Bitcode/Reader/MetadataLoader.cpp
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
llvm/lib/IR/AsmWriter.cpp
llvm/lib/IR/DIBuilder.cpp
llvm/lib/IR/DebugInfoMetadata.cpp
llvm/lib/IR/LLVMContextImpl.h
llvm/lib/IR/Verifier.cpp
llvm/test/Assembler/disubprogram.ll
llvm/test/DebugInfo/Generic/thrownTypes.ll [new file with mode: 0644]
llvm/test/Verifier/DISubprogram.ll [new file with mode: 0644]
llvm/unittests/IR/IRBuilderTest.cpp
llvm/unittests/IR/MetadataTest.cpp