diff options
author | Sanjin Sijaric <ssijaric@codeaurora.org> | 2019-01-16 07:39:44 +0000 |
---|---|---|
committer | Sanjin Sijaric <ssijaric@codeaurora.org> | 2019-01-16 07:39:44 +0000 |
commit | cfa2a2afa64890858999ab9510627712c0f5e4f9 (patch) | |
tree | 2587a5d0be6b848c3518813a26a56a3b12f43265 /clang/test/CodeGen/exceptions-seh-nested-finally.c | |
parent | 94d6dd4c082412d7914babffb8b7eee28b985d1f (diff) | |
download | bcm5719-llvm-cfa2a2afa64890858999ab9510627712c0f5e4f9.tar.gz bcm5719-llvm-cfa2a2afa64890858999ab9510627712c0f5e4f9.zip |
[SEH] Pass the frame pointer from SEH finally to finally functions
Pass the frame pointer that the first finally block receives onto the nested
finally block, instead of generating it using localaddr.
Differential Revision: https://reviews.llvm.org/D56463
llvm-svn: 351302
Diffstat (limited to 'clang/test/CodeGen/exceptions-seh-nested-finally.c')
-rw-r--r-- | clang/test/CodeGen/exceptions-seh-nested-finally.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/CodeGen/exceptions-seh-nested-finally.c b/clang/test/CodeGen/exceptions-seh-nested-finally.c new file mode 100644 index 00000000000..7385d18f0cd --- /dev/null +++ b/clang/test/CodeGen/exceptions-seh-nested-finally.c @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 %s -triple x86_64-pc-win32 -fms-extensions -emit-llvm -o - \ +// RUN: | FileCheck %s +// RUN: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -emit-llvm -o - \ +// RUN: | FileCheck %s +// RUN: %clang_cc1 %s -triple aarch64-windows -fms-extensions -emit-llvm -o - \ +// RUN: | FileCheck %s + +// Check that the first finally block passes the enclosing function's frame +// pointer to the second finally block, instead of generating it via localaddr. + +// CHECK-LABEL: define internal void @"?fin$0@0@main@@"({{i8( zeroext)?}} %abnormal_termination, i8* %frame_pointer) +// CHECK: call void @"?fin$1@0@main@@"({{i8( zeroext)?}} 0, i8* %frame_pointer) +int +main() { + int Check = 0; + __try { + Check = 3; + } __finally { + __try { + Check += 2; + } __finally { + Check += 4; + } + } + return Check; +} |