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( zeroext)?}} %abnormal_termination, i8* %frame_pointer) |
12 | // CHECK: call void @"?fin$1@0@main@@"({{i8( zeroext)?}} 0, i8* %frame_pointer) |
13 | int |
14 | main() { |
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 | |