62 lines · plain
1; RUN: sed -e s/.Cxx:// %s | opt -mtriple=i386-pc-windows-msvc -S -x86-winehstate | FileCheck %s2; RUN: sed -e s/.SEH:// %s | opt -mtriple=i386-pc-windows-msvc -S -x86-winehstate | FileCheck %s3 4declare i32 @__CxxFrameHandler3(...)5declare i32 @_except_handler3(...)6declare void @dummy_filter()7 8declare void @f(i32)9 10; CHECK-LABEL: define void @test2(11;Cxx: define void @test2(i1 %b) personality ptr @__CxxFrameHandler3 {12;SEH: define void @test2(i1 %b) personality ptr @_except_handler3 {13entry:14 ; CHECK: entry:15 ; CHECK: store i32 116 ; CHECK: invoke void @f(i32 1)17 invoke void @f(i32 1)18 to label %exit unwind label %cleanup.pad19cleanup.pad:20 %cleanup = cleanuppad within none []21 br i1 %b, label %left, label %right22left:23 cleanupret from %cleanup unwind label %catch.pad24right:25 cleanupret from %cleanup unwind label %catch.pad26catch.pad:27 %cs1 = catchswitch within none [label %catch.body] unwind to caller28catch.body:29;Cxx: %catch = catchpad within %cs1 [ptr null, i32 u0x40, ptr null]30;SEH: %catch = catchpad within %cs1 [ptr @dummy_filter]31 catchret from %catch to label %exit32exit:33 ret void34}35 36; CHECK-LABEL: define void @test3(37;Cxx: define void @test3() personality ptr @__CxxFrameHandler3 {38;SEH: define void @test3() personality ptr @_except_handler3 {39entry:40 ; CHECK: entry:41 ; CHECK: store i32 042 ; CHECK: invoke void @f(i32 1)43 invoke void @f(i32 1)44 to label %exit unwind label %cleanup.pad45cleanup.pad:46 ; CHECK: cleanup.pad:47 ; CHECK: invoke void @f(i32 0)48 %cleanup = cleanuppad within none []49 invoke void @f(i32 0)50 to label %unreachable unwind label %catch.pad51unreachable:52 unreachable53catch.pad:54 %cs1 = catchswitch within none [label %catch.body] unwind to caller55catch.body:56;Cxx: %catch = catchpad within %cs1 [ptr null, i32 u0x40, ptr null]57;SEH: %catch = catchpad within %cs1 [ptr @dummy_filter]58 catchret from %catch to label %exit59exit:60 ret void61}62