1 ; Test that any rethrown exceptions in an inlined function are automatically 2 ; turned into branches to the invoke destination. 3 4 ; RUN: opt < %s -inline -S | not grep unwind$ 5 6 declare void @might_throw() 7 8 define internal i32 @callee() { 9 invoke void @might_throw( ) 10 to label %cont unwind label %exc 11 12 cont: ; preds = %0 13 ret i32 0 14 15 exc: ; preds = %0a 16 ; This just rethrows the exception! 17 %exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0 18 cleanup 19 resume { i8*, i32 } %exn 20 } 21 22 ; caller returns true if might_throw throws an exception... which gets 23 ; propagated by callee. 24 define i32 @caller() { 25 %X = invoke i32 @callee( ) 26 to label %cont unwind label %Handler ; <i32> [#uses=1] 27 28 cont: ; preds = %0 29 ret i32 %X 30 31 Handler: ; preds = %0 32 ; This consumes an exception thrown by might_throw 33 %exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0 34 cleanup 35 ret i32 1 36 } 37 38 declare i32 @__gxx_personality_v0(...) 39