diff options
Diffstat (limited to 'test/Feature/exception.ll')
| -rw-r--r-- | test/Feature/exception.ll | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/test/Feature/exception.ll b/test/Feature/exception.ll index 7568ecfa5f75..2634692f4252 100644 --- a/test/Feature/exception.ll +++ b/test/Feature/exception.ll @@ -25,3 +25,112 @@ lpad: ; preds = %entry declare void @_Z3quxv() optsize declare i32 @__gxx_personality_v0(...) + +define void @cleanupret0() personality i32 (...)* @__gxx_personality_v0 { +entry: + invoke void @_Z3quxv() optsize + to label %exit unwind label %pad +pad: + %cp = cleanuppad within none [i7 4] + cleanupret from %cp unwind to caller +exit: + ret void +} + +; forward ref by name +define void @cleanupret1() personality i32 (...)* @__gxx_personality_v0 { +entry: + invoke void @_Z3quxv() optsize + to label %exit unwind label %pad +cleanup: + cleanupret from %cp unwind label %pad +pad: + %cp = cleanuppad within none [] + br label %cleanup +exit: + ret void +} + +; forward ref by ID +define void @cleanupret2() personality i32 (...)* @__gxx_personality_v0 { +entry: + invoke void @_Z3quxv() optsize + to label %exit unwind label %pad +cleanup: + cleanupret from %0 unwind label %pad +pad: + %0 = cleanuppad within none [] + br label %cleanup +exit: + ret void +} + +define void @catchret0() personality i32 (...)* @__gxx_personality_v0 { +entry: + invoke void @_Z3quxv() optsize + to label %exit unwind label %pad +pad: + %cs1 = catchswitch within none [label %catch] unwind to caller +catch: + %cp = catchpad within %cs1 [i7 4] + catchret from %cp to label %exit +exit: + ret void +} + +; forward ref by name +define void @catchret1() personality i32 (...)* @__gxx_personality_v0 { +entry: + invoke void @_Z3quxv() optsize + to label %exit unwind label %pad +catchret: + catchret from %cp to label %exit +pad: + %cs1 = catchswitch within none [label %catch] unwind to caller +catch: + %cp = catchpad within %cs1 [i7 4] + br label %catchret +exit: + ret void +} + +; forward ref by ID +define void @catchret2() personality i32 (...)* @__gxx_personality_v0 { +entry: + invoke void @_Z3quxv() optsize + to label %exit unwind label %pad +catchret: + catchret from %0 to label %exit +pad: + %cs1 = catchswitch within none [label %catch] unwind to caller +catch: + %0 = catchpad within %cs1 [i7 4] + br label %catchret +exit: + ret void +} + +define i8 @catchpad() personality i32 (...)* @__gxx_personality_v0 { +entry: + invoke void @_Z3quxv() optsize + to label %exit unwind label %bb2 +bb2: + %cs1 = catchswitch within none [label %catch] unwind to caller +catch: + catchpad within %cs1 [i7 4] + br label %exit +exit: + ret i8 0 +} + +define void @cleanuppad() personality i32 (...)* @__gxx_personality_v0 { +entry: + br label %try.cont + +try.cont: + invoke void @_Z3quxv() optsize + to label %try.cont unwind label %bb +bb: + cleanuppad within none [i7 4] + ret void +} |
