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; 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