diff options
Diffstat (limited to 'test/CodeGen/exceptions-seh-nested-finally.c')
-rw-r--r-- | test/CodeGen/exceptions-seh-nested-finally.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGen/exceptions-seh-nested-finally.c b/test/CodeGen/exceptions-seh-nested-finally.c new file mode 100644 index 000000000000..7385d18f0cd8 --- /dev/null +++ b/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; +} |