diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 |
commit | dd58ef019b700900793a1eb48b52123db01b654e (patch) | |
tree | fcfbb4df56a744f4ddc6122c50521dd3f1c5e196 /test/CodeGen/WinEH/wineh-intrinsics.ll | |
parent | 2fe5752e3a7c345cdb59e869278d36af33c13fa4 (diff) | |
download | src-dd58ef019b700900793a1eb48b52123db01b654e.tar.gz src-dd58ef019b700900793a1eb48b52123db01b654e.zip |
Vendor import of llvm trunk r256633:
Notes
Notes:
svn path=/vendor/llvm/dist/; revision=292915
Diffstat (limited to 'test/CodeGen/WinEH/wineh-intrinsics.ll')
-rw-r--r-- | test/CodeGen/WinEH/wineh-intrinsics.ll | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/CodeGen/WinEH/wineh-intrinsics.ll b/test/CodeGen/WinEH/wineh-intrinsics.ll new file mode 100644 index 000000000000..3658792a3843 --- /dev/null +++ b/test/CodeGen/WinEH/wineh-intrinsics.ll @@ -0,0 +1,44 @@ +; RUN: opt -lint -disable-output < %s + +; This test is meant to prove that the verifier does not report errors for correct +; use of the llvm.eh.exceptionpointer intrinsic. + +target triple = "x86_64-pc-windows-msvc" + +declare i8* @llvm.eh.exceptionpointer.p0i8(token) +declare i8 addrspace(1)* @llvm.eh.exceptionpointer.p1i8(token) + +declare void @f(...) + +define void @test1() personality i32 (...)* @__CxxFrameHandler3 { +entry: + invoke void (...) @f(i32 1) + to label %exit unwind label %catchpad +catchpad: + %cs1 = catchswitch within none [label %do_catch] unwind to caller +do_catch: + %catch = catchpad within %cs1 [i32 1] + %exn = call i8* @llvm.eh.exceptionpointer.p0i8(token %catch) + call void (...) @f(i8* %exn) + catchret from %catch to label %exit +exit: + ret void +} + +define void @test2() personality i32 (...)* @ProcessManagedException { +entry: + invoke void (...) @f(i32 1) + to label %exit unwind label %catchpad +catchpad: + %cs1 = catchswitch within none [label %do_catch] unwind to caller +do_catch: + %catch = catchpad within %cs1 [i32 1] + %exn = call i8 addrspace(1)* @llvm.eh.exceptionpointer.p1i8(token %catch) + call void (...) @f(i8 addrspace(1)* %exn) + catchret from %catch to label %exit +exit: + ret void +} + +declare i32 @__CxxFrameHandler3(...) +declare i32 @ProcessManagedException(...) |