1 // RUN: %clang_cc1 %s -triple x86_64-pc-win32 -fms-extensions -emit-llvm -o - \
2 // RUN: | FileCheck %s
3 // RUN: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -emit-llvm -o - \
4 // RUN: | FileCheck %s
5 // RUN: %clang_cc1 %s -triple aarch64-windows -fms-extensions -emit-llvm -o - \
6 // RUN: | FileCheck %s
7
8 // Check that the first finally block passes the enclosing function's frame
9 // pointer to the second finally block, instead of generating it via localaddr.
10
11 // CHECK-LABEL: define internal void @"?fin$0@0@main@@"({{i8 noundef( zeroext)?}} %abnormal_termination, ptr noundef %frame_pointer)
12 // CHECK: call void @"?fin$1@0@main@@"({{i8 noundef( zeroext)?}} 0, ptr noundef %frame_pointer)
13 int
main(void)14 main(void) {
15 int Check = 0;
16 __try {
17 Check = 3;
18 } __finally {
19 __try {
20 Check += 2;
21 } __finally {
22 Check += 4;
23 }
24 }
25 return Check;
26 }
27