; Test that any rethrown exceptions in an inlined function are automatically
; turned into branches to the invoke destination.

; RUN: opt < %s -passes=inline -S | FileCheck %s
; RUN: opt < %s -passes='cgscc(inline)' -S | FileCheck %s
; RUN: opt < %s -passes='module-inline' -S | FileCheck %s

declare void @might_throw()

define internal i32 @callee() personality ptr @__gxx_personality_v0 {
entry:
  invoke void @might_throw()
      to label %cont unwind label %exc

cont:
  ret i32 0

exc:
 ; This just rethrows the exception!
  %exn = landingpad {ptr, i32}
         cleanup
  resume { ptr, i32 } %exn
}

; caller returns true if might_throw throws an exception... which gets
; propagated by callee.
define i32 @caller() personality ptr @__gxx_personality_v0 {
; CHECK-LABEL: define i32 @caller()
entry:
  %X = invoke i32 @callee()
           to label %cont unwind label %Handler
; CHECK-NOT: @callee
; CHECK: invoke void @might_throw()
; At this point we just check that the rest of the function does not 'resume'
; at any point and instead the inlined resume is threaded into normal control
; flow.
; CHECK-NOT: resume

cont:
  ret i32 %X

Handler:
; This consumes an exception thrown by might_throw
  %exn = landingpad {ptr, i32}
         cleanup
  ret i32 1
}

declare i32 @__gxx_personality_v0(...)
