xref: /llvm-project/clang/test/CodeGen/exceptions-seh-nested-finally.c (revision 39db5e1ed87363a9ffea81e53520b542201b3262)
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