1 // RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-windows -fasync-exceptions -fcxx-exceptions -fexceptions -fms-extensions -x c++ -Wno-implicit-function-declaration -S -emit-llvm %s -o - | FileCheck %s
2
3 // CHECK: invoke void @llvm.seh.try.begin()
4 // CHECK: invoke void @llvm.seh.try.begin()
5 // CHECK: %[[src:[0-9-]+]] = load volatile i32, i32* %i
6 // CHECK-NEXT: i32 noundef %[[src]]
7 // CHECK: invoke void @llvm.seh.try.end()
8 // CHECK: invoke void @llvm.seh.try.end()
9
10 // CHECK: define internal void @"?fin$0@0@main@@"(i8 noundef %abnormal_termination
11 // CHECK: invoke void @llvm.seh.try.begin()
12 // CHECK: invoke void @llvm.seh.try.end()
13
14 // *****************************************************************************
15 // Abstract: Test __Try in __finally under SEH -EHa option
16 void printf(...);
17 int volatile *NullPtr = 0;
main()18 int main() {
19 for (int i = 0; i < 3; i++) {
20 printf(" --- Test _Try in _finally --- i = %d \n", i);
21 __try {
22 __try {
23 printf(" In outer _try i = %d \n", i);
24 if (i == 0)
25 *NullPtr = 0;
26 } __finally {
27 __try {
28 printf(" In outer _finally i = %d \n", i);
29 if (i == 1)
30 *NullPtr = 0;
31 } __finally {
32 printf(" In Inner _finally i = %d \n", i);
33 if (i == 2)
34 *NullPtr = 0;
35 }
36 }
37 } __except (1) {
38 printf(" --- In outer except handler i = %d \n", i);
39 }
40 }
41 return 0;
42 }
43