OSDN Git Service

[WinEH] Verify unwind edges against EH pad tree
authorJoseph Tremoulet <jotrem@microsoft.com>
Sun, 10 Jan 2016 04:28:38 +0000 (04:28 +0000)
committerJoseph Tremoulet <jotrem@microsoft.com>
Sun, 10 Jan 2016 04:28:38 +0000 (04:28 +0000)
commitfe9953a02c963403dd2e2fbda2f4c596cd6a4704
treee0b1cd2d230b7ab99ebb911f19478e5042ad57d7
parent748e8f493ab4e6f4b346a95cfcb8f05b0a40bc3b
[WinEH] Verify unwind edges against EH pad tree

Summary:
Funclet EH personalities require a tree-like nesting among funclets
(enforced by the ParentPad linkage in the IR), and also require that
unwind edges conform to certain rules with respect to the tree:
 - An unwind edge may exit 0 or more ancestor pads
 - An unwind edge must enter exactly one EH pad, which must be distinct
   from any exited pads
 - A cleanupret's edge must exit its cleanuppad

Describe these rules in the LangRef, and enforce them in the verifier.

Reviewers: rnk, majnemer, andrew.w.kaylor

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257272 91177308-0d34-0410-b5e6-96231b3b80d8
docs/ExceptionHandling.rst
docs/LangRef.rst
lib/IR/Verifier.cpp
test/Bitcode/compatibility.ll
test/Feature/exception.ll
test/Verifier/invalid-eh.ll