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