Add a Windows EH preparation pass that zaps resumes
authorReid Kleckner <reid@kleckner.net>
Thu, 29 Jan 2015 00:41:44 +0000 (00:41 +0000)
committerReid Kleckner <reid@kleckner.net>
Thu, 29 Jan 2015 00:41:44 +0000 (00:41 +0000)
commit1185fced3de79e47c14183f8b00dd8e620559da5
tree81a9285231fb68b2bf7a5ca4f4b4c6804f650841
parentef61def9d57c10ad5efb38ce6e6bc5b9d3fcba72
Add a Windows EH preparation pass that zaps resumes

If the personality is not a recognized MSVC personality function, this
pass delegates to the dwarf EH preparation pass. This chaining supports
people on *-windows-itanium or *-windows-gnu targets.

Currently this recognizes some personalities used by MSVC and turns
resume instructions into traps to avoid link errors.  Even if cleanups
are not used in the source program, LLVM requires the frontend to emit a
code path that resumes unwinding after an exception.  Clang does this,
and we get unreachable resume instructions. PR20300 covers cleaning up
these unreachable calls to resume.

Reviewers: majnemer

Differential Revision: http://reviews.llvm.org/D7216

llvm-svn: 227405
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/Passes.cpp
llvm/lib/CodeGen/WinEHPrepare.cpp [new file with mode: 0644]
llvm/test/CodeGen/X86/seh-safe-div.ll
llvm/test/CodeGen/X86/win_eh_prepare.ll [new file with mode: 0644]
llvm/tools/opt/opt.cpp