diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Bindings/llvm-c/echo.ll | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/llvm/test/Bindings/llvm-c/echo.ll b/llvm/test/Bindings/llvm-c/echo.ll index dbe2eed910b..8c9cd7bd723 100644 --- a/llvm/test/Bindings/llvm-c/echo.ll +++ b/llvm/test/Bindings/llvm-c/echo.ll @@ -122,3 +122,38 @@ do: done: ret i32 %p } + +declare void @personalityFn() + +define void @exn() personality void ()* @personalityFn { +entry: + invoke void @decl() + to label %via.cleanup unwind label %exn.dispatch +via.cleanup: + invoke void @decl() + to label %via.catchswitch unwind label %cleanup.inner +cleanup.inner: + %cp.inner = cleanuppad within none [] + cleanupret from %cp.inner unwind label %exn.dispatch +via.catchswitch: + invoke void @decl() + to label %exit unwind label %dispatch.inner +dispatch.inner: + %cs.inner = catchswitch within none [label %pad.inner] unwind label %exn.dispatch +pad.inner: + %catch.inner = catchpad within %cs.inner [i32 0] + catchret from %catch.inner to label %exit +exn.dispatch: + %cs = catchswitch within none [label %pad1, label %pad2] unwind label %cleanup +pad1: + catchpad within %cs [i32 1] + unreachable +pad2: + catchpad within %cs [i32 2] + unreachable +cleanup: + %cp = cleanuppad within none [] + cleanupret from %cp unwind to caller +exit: + ret void +} |