diff options
| author | Martin Storsjo <martin@martin.st> | 2018-12-18 08:32:37 +0000 |
|---|---|---|
| committer | Martin Storsjo <martin@martin.st> | 2018-12-18 08:32:37 +0000 |
| commit | 8f0cb9c3a83be57e8c485e03e21dafa43f795d45 (patch) | |
| tree | cf43136a57c678ca2df1f36d67bf1254289b5342 /llvm/test/CodeGen/AArch64 | |
| parent | 284d426f6d258dbeac7109723b840bfa5b65ef8a (diff) | |
| download | bcm5719-llvm-8f0cb9c3a83be57e8c485e03e21dafa43f795d45.tar.gz bcm5719-llvm-8f0cb9c3a83be57e8c485e03e21dafa43f795d45.zip | |
[AArch64] [MinGW] Allow enabling SEH exceptions
The default still is dwarf, but SEH exceptions can now be enabled
optionally for the MinGW target.
Differential Revision: https://reviews.llvm.org/D55748
llvm-svn: 349451
Diffstat (limited to 'llvm/test/CodeGen/AArch64')
| -rw-r--r-- | llvm/test/CodeGen/AArch64/wineh-mingw.ll | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/wineh-mingw.ll b/llvm/test/CodeGen/AArch64/wineh-mingw.ll new file mode 100644 index 00000000000..ae26b06cfa3 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/wineh-mingw.ll @@ -0,0 +1,48 @@ +; RUN: llc < %s -exception-model=wineh -mtriple=aarch64-pc-mingw32 | FileCheck %s -check-prefix=WINEH +; RUN: llc < %s -exception-model=wineh -mtriple=aarch64-pc-mingw32 -filetype=obj | llvm-readobj -s | FileCheck %s -check-prefix=WINEH-SECTIONS + +; Check emission of eh handler and handler data +declare i32 @_d_eh_personality(i32, i32, i64, i8*, i8*) +declare void @_d_eh_resume_unwind(i8*) + +declare i32 @bar() + +define i32 @foo4() #0 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality { +entry: + %step = alloca i32, align 4 + store i32 0, i32* %step + %tmp = load i32, i32* %step + + %tmp1 = invoke i32 @bar() + to label %finally unwind label %landingpad + +finally: + store i32 1, i32* %step + br label %endtryfinally + +landingpad: + %landing_pad = landingpad { i8*, i32 } + cleanup + %tmp3 = extractvalue { i8*, i32 } %landing_pad, 0 + store i32 2, i32* %step + call void @_d_eh_resume_unwind(i8* %tmp3) + unreachable + +endtryfinally: + %tmp10 = load i32, i32* %step + ret i32 %tmp10 +} +; WINEH-LABEL: foo4: +; WINEH: .seh_proc foo4 +; WINEH: .seh_handler _d_eh_personality, @unwind, @except +; WINEH: ret +; WINEH: .section .xdata,"dr" +; WINEH-NEXT: .seh_handlerdata +; WINEH-NEXT: .text +; WINEH-NEXT: .seh_endproc +; WINEH: .section .xdata,"dr" +; WINEH-NEXT: .p2align 2 +; WINEH-NEXT: GCC_except_table0: + +; WINEH-SECTIONS: Name: .xdata +; WINEH-SECTIONS-NOT: Name: .gcc_except_table |

