1 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-pc-windows-msvc18.0.0 -std=c++11 -fms-compatibility-version=18 -fms-extensions -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s 2 // REQUIRES: x86-registered-target 3 // expected-no-diagnostics 4 5 void foo(); 6 void bar(); 7 8 // CHECK-LABEL: @main 9 int main() { 10 // CHECK: call void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%ident_t* @0, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED:@.+]] to void (i32*, i32*, ...)*)) 11 #pragma omp parallel 12 { 13 try { 14 foo(); 15 } catch (int t) { 16 #pragma omp critical 17 { 18 bar(); 19 }; 20 } 21 }; 22 // CHECK: ret i32 0 23 return 0; 24 } 25 26 // CHECK: define internal void [[OUTLINED]]( 27 // CHECK: [[GID:%.+]] = call i32 @__kmpc_global_thread_num(%ident_t* @0) 28 // CHECK: invoke void @{{.+}}foo 29 // CHECK: catchswitch within 30 // CHECK: catchpad within 31 // CHECK: call void @__kmpc_critical(%ident_t* @0, i32 [[GID]], 32 // CHECK: invoke void @{{.+}}bar 33 // CHECK: call void @__kmpc_end_critical(%ident_t* @0, i32 [[GID]], 34 // CHECK: catchret from 35 // CHECK: cleanuppad within 36 // CHECK: call void @__kmpc_end_critical(%ident_t* @0, i32 [[GID]], 37 // CHECK: cleanupret from 38 39