1*9880d681SAndroid Build Coastguard Worker; RUN: sed -e s/.Cxx:// %s | opt -mtriple=x86-pc-windows-msvc -S -x86-winehstate | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: sed -e s/.SEH:// %s | opt -mtriple=x86-pc-windows-msvc -S -x86-winehstate | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare i32 @__CxxFrameHandler3(...) 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @_except_handler3(...) 6*9880d681SAndroid Build Coastguard Workerdeclare void @dummy_filter() 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdeclare void @f(i32) 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @test2( 11*9880d681SAndroid Build Coastguard Worker;Cxx: define void @test2(i1 %b) personality i32 (...)* @__CxxFrameHandler3 { 12*9880d681SAndroid Build Coastguard Worker;SEH: define void @test2(i1 %b) personality i32 (...)* @_except_handler3 { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker ; CHECK: entry: 15*9880d681SAndroid Build Coastguard Worker ; CHECK: store i32 1 16*9880d681SAndroid Build Coastguard Worker ; CHECK: invoke void @f(i32 1) 17*9880d681SAndroid Build Coastguard Worker invoke void @f(i32 1) 18*9880d681SAndroid Build Coastguard Worker to label %exit unwind label %cleanup.pad 19*9880d681SAndroid Build Coastguard Workercleanup.pad: 20*9880d681SAndroid Build Coastguard Worker %cleanup = cleanuppad within none [] 21*9880d681SAndroid Build Coastguard Worker br i1 %b, label %left, label %right 22*9880d681SAndroid Build Coastguard Workerleft: 23*9880d681SAndroid Build Coastguard Worker cleanupret from %cleanup unwind label %catch.pad 24*9880d681SAndroid Build Coastguard Workerright: 25*9880d681SAndroid Build Coastguard Worker cleanupret from %cleanup unwind label %catch.pad 26*9880d681SAndroid Build Coastguard Workercatch.pad: 27*9880d681SAndroid Build Coastguard Worker %cs1 = catchswitch within none [label %catch.body] unwind to caller 28*9880d681SAndroid Build Coastguard Workercatch.body: 29*9880d681SAndroid Build Coastguard Worker;Cxx: %catch = catchpad within %cs1 [i8* null, i32 u0x40, i8* null] 30*9880d681SAndroid Build Coastguard Worker;SEH: %catch = catchpad within %cs1 [void ()* @dummy_filter] 31*9880d681SAndroid Build Coastguard Worker catchret from %catch to label %exit 32*9880d681SAndroid Build Coastguard Workerexit: 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @test3( 37*9880d681SAndroid Build Coastguard Worker;Cxx: define void @test3() personality i32 (...)* @__CxxFrameHandler3 { 38*9880d681SAndroid Build Coastguard Worker;SEH: define void @test3() personality i32 (...)* @_except_handler3 { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker ; CHECK: entry: 41*9880d681SAndroid Build Coastguard Worker ; CHECK: store i32 0 42*9880d681SAndroid Build Coastguard Worker ; CHECK: invoke void @f(i32 1) 43*9880d681SAndroid Build Coastguard Worker invoke void @f(i32 1) 44*9880d681SAndroid Build Coastguard Worker to label %exit unwind label %cleanup.pad 45*9880d681SAndroid Build Coastguard Workercleanup.pad: 46*9880d681SAndroid Build Coastguard Worker ; CHECK: cleanup.pad: 47*9880d681SAndroid Build Coastguard Worker ; CHECK: invoke void @f(i32 0) 48*9880d681SAndroid Build Coastguard Worker %cleanup = cleanuppad within none [] 49*9880d681SAndroid Build Coastguard Worker invoke void @f(i32 0) 50*9880d681SAndroid Build Coastguard Worker to label %unreachable unwind label %catch.pad 51*9880d681SAndroid Build Coastguard Workerunreachable: 52*9880d681SAndroid Build Coastguard Worker unreachable 53*9880d681SAndroid Build Coastguard Workercatch.pad: 54*9880d681SAndroid Build Coastguard Worker %cs1 = catchswitch within none [label %catch.body] unwind to caller 55*9880d681SAndroid Build Coastguard Workercatch.body: 56*9880d681SAndroid Build Coastguard Worker;Cxx: %catch = catchpad within %cs1 [i8* null, i32 u0x40, i8* null] 57*9880d681SAndroid Build Coastguard Worker;SEH: %catch = catchpad within %cs1 [void ()* @dummy_filter] 58*9880d681SAndroid Build Coastguard Worker catchret from %catch to label %exit 59*9880d681SAndroid Build Coastguard Workerexit: 60*9880d681SAndroid Build Coastguard Worker ret void 61*9880d681SAndroid Build Coastguard Worker} 62