// RUN: %target-sil-opt -enable-sil-verify-all -unsafe-guaranteed-peephole %s | FileCheck %s
sil_stage canonical

import Builtin
import Swift

public class Base {
  public func beep()
}

public class Foo : Base {
  public override func beep()
}

sil @beep : $@convention(thin) () -> ()
sil @beep2 : $@convention(thin) (@owned Foo) -> ()
sil @beep_or_throw : $@convention(thin) () -> @error ErrorProtocol

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_after
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK-NOT: release
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_after : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  strong_release %5 : $Foo
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_after2
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK-NOT: release
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_after2 : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  release_value %4 : $(Foo, Builtin.Int8)
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_after3
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK-NOT: release
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_after3 : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  release_value %0 : $Foo
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_noretain
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK:   [[G:%.*]] = builtin "unsafeGuaranteed"
// CHECK:   [[GV:%.*]] = tuple_extract [[G]]{{.*}}, 0
// CHECK:   [[M:%.*]] = class_method [[GV]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[GV]])
// CHECK:   release
// CHECK:   unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_noretain : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_norelease
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK:   retain [[P]]
// CHECK:   [[G:%.*]] = builtin "unsafeGuaranteed"
// CHECK:   [[GV:%.*]] = tuple_extract [[G]]{{.*}}, 0
// CHECK:   [[M:%.*]] = class_method [[GV]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[GV]])
// CHECK:   unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_norelease : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_skip_rr
// CHECK: bb0([[P:%.*]] : $Foo, [[P2:%.*]] : $Foo):
// CHECK-NOT: retain [[P]]
// CHECK-NOT: unsafeGuaranteed
// CHECK:   retain [[P2]]
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release [[P]]
// CHECK:   release [[P2]]
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_skip_rr : $@convention(method) (@guaranteed Foo, @guaranteed Foo) -> () {
bb0(%0 : $Foo, %1: $Foo):
  strong_retain %0 : $Foo
  strong_retain %1 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  strong_release %1 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_other_inst_between_retain
// CHECK: bb0
// CHECK:   strong_retain [[P]]
// CHECK:   cond_fail
// CHECK:   builtin "unsafeGuaranteed"
// CHECK:   class_method {{.*}} : $Foo, #Foo.beep
// CHECK:   apply
// CHECK:   strong_release
// CHECK:   builtin "unsafeGuaranteedEnd"
// CHECK: }
sil @testUnsafeGuaranteed_other_inst_between_retain: $@convention(method) (@guaranteed Foo, Builtin.Int1) -> () {
bb0(%0 : $Foo, %1 : $Builtin.Int1):
  strong_retain %0 : $Foo
  cond_fail %1 : $Builtin.Int1
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_other_inst_between_release
// CHECK: bb0
// CHECK:   strong_retain [[P]]
// CHECK:   builtin "unsafeGuaranteed"
// CHECK:   class_method {{.*}} : $Foo, #Foo.beep
// CHECK:   apply
// CHECK:   strong_release
// CHECK:   cond_fail
// CHECK:   builtin "unsafeGuaranteedEnd"
// CHECK: }
sil @testUnsafeGuaranteed_other_inst_between_release: $@convention(method) (@guaranteed Foo, Builtin.Int1) -> () {
bb0(%0 : $Foo, %1 : $Builtin.Int1):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  cond_fail %1 : $Builtin.Int1
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_cfg
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   checked_cast_br [exact] [[P]] : $Foo to $Foo, bb1, bb3
// CHECK: bb1([[P2:%.*]] : $Foo):
// CHECK:   function_ref @beep : $@convention(thin) () -> ()
// CHECK:   %4 = apply %3() : $@convention(thin) () -> ()
// CHECK:   br bb2
// CHECK: bb2:
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: bb3:
// CHECK:   [[M:%.*]] = class_method %0 : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK:   br bb2
// CHECK: }
sil @testUnsafeGuaranteed_cfg : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  checked_cast_br [exact] %5 : $Foo to $Foo, bb1, bb3

bb1(%11 : $Foo):
  %12 = function_ref @beep : $@convention(thin) () -> ()
  %13 = apply %12() : $@convention(thin) () -> ()
  br bb2

bb2:
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()

bb3:
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  br bb2
}

/// CHECK-LABEL: sil @testUnsafeGuaranteed_cfg_2
/// CHECK: unsafeGuaranteed
/// CHECK: unsafeGuaranteedEnd
/// CHECK: }
sil @testUnsafeGuaranteed_cfg_2 : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  checked_cast_br [exact] %5 : $Foo to $Foo, bb1, bb3

bb1(%11 : $Foo):
  %12 = function_ref @beep : $@convention(thin) () -> ()
  %13 = apply %12() : $@convention(thin) () -> ()
  br bb2

bb2:
// Make sure we don't crash on an unsafeGuaranteedEnd walking backwards in the
// block.
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()

bb3:
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  br bb2
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_debug_inst
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_debug_inst : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  debug_value %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_retain_release
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: strong_retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   retain_value [[P]]
// CHECK:   [[M:%.*]] = function_ref @beep2
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_retain_release : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  retain_value %4 : $(Foo, Builtin.Int8)
  %19 = function_ref @beep2 :  $@convention(thin) (@owned Foo) -> ()
  %20 = apply %19(%5) : $@convention(thin) (@owned Foo) -> ()
  release_value %4 : $(Foo, Builtin.Int8)
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

struct MyInt {
  @sil_stored var val: Builtin.Int32
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_sideeffectfree_inst
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_sideeffectfree_inst : $@convention(method) (@guaranteed Foo, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $Builtin.Int32):
  strong_retain %0 : $Foo
  debug_value %0 : $Foo
  %3 = struct $MyInt(%1 : $Builtin.Int32)
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %21 = struct $MyInt(%1 : $Builtin.Int32)
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_sideeffect_inst
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK: retain
// CHECK: unsafeGuaranteed
// CHECK: release
// CHECK: unsafeGuaranteedEnd
// CHECK: }
sil @testUnsafeGuaranteed_sideeffect_inst : $@convention(method) (@guaranteed Foo, @inout Builtin.Int32, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $*Builtin.Int32, %2: $Builtin.Int32):
  strong_retain %0 : $Foo
  store %2 to %1 : $*Builtin.Int32
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_sideeffect_inst2
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK: retain
// CHECK: unsafeGuaranteed
// CHECK: release
// CHECK: unsafeGuaranteedEnd
// CHECK: }
sil @testUnsafeGuaranteed_sideeffect_inst2 : $@convention(method) (@guaranteed Foo, @inout Builtin.Int32, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $*Builtin.Int32, %2: $Builtin.Int32):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> () , $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  store %2 to %1 : $*Builtin.Int32
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_cast_inst
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:  [[U:%.*]] = upcast [[P]] : $Foo to $Base
// CHECK:   [[M:%.*]] = class_method [[U]] : $Base, #Base.beep
// CHECK:   apply [[M]]([[U]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_cast_inst : $@convention(method) (@guaranteed Foo, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $Builtin.Int32):
  strong_retain %0 : $Foo
  debug_value %0 : $Foo
  %3 = struct $MyInt(%1 : $Builtin.Int32)
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %7 = upcast %5 : $Foo to $Base
  %19 = class_method %7 : $Base, #Base.beep!1 : (Base) -> () -> () , $@convention(method) (@guaranteed Base) -> ()
  %20 = apply %19(%7) : $@convention(method) (@guaranteed Base) -> ()
  strong_release %7 : $Base
  %21 = struct $MyInt(%1 : $Builtin.Int32)
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_cast2_inst
// CHECK: bb0([[P:%.*]] : $AnyObject
// CHECK:  [[C:%.*]] = unchecked_ref_cast [[P]] : $AnyObject to $Foo
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:  [[U:%.*]] = upcast [[C]] : $Foo to $Base
// CHECK:   [[M:%.*]] = class_method [[U]] : $Base, #Base.beep
// CHECK:   apply [[M]]([[U]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_cast2_inst : $@convention(method) (@guaranteed AnyObject, Builtin.Int32) -> () {
bb0(%0 : $AnyObject, %1: $Builtin.Int32):
  %2 = unchecked_ref_cast %0 : $AnyObject to $Foo
  strong_retain %0 : $AnyObject
  debug_value %0 : $AnyObject
  %3 = struct $MyInt(%1 : $Builtin.Int32)
  %4 = builtin "unsafeGuaranteed"<Foo>(%2 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %7 = upcast %5 : $Foo to $Base
  %19 = class_method %7 : $Base, #Base.beep!1 : (Base) -> () -> () , $@convention(method) (@guaranteed Base) -> ()
  %20 = apply %19(%7) : $@convention(method) (@guaranteed Base) -> ()
  strong_release %7 : $Base
  %21 = struct $MyInt(%1 : $Builtin.Int32)
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_throw
// CHECK:bb0
// CHECK: unsafeGuaranteed
// CHECK:bb1
// CHECK: unsafeGuaranteedEnd
// CHECK: return
// CHECK:bb2
// CHECK: throw
sil @testUnsafeGuaranteed_throw : $@convention(method) (@guaranteed Foo) -> @error Error {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %7 = function_ref @beep_or_throw : $@convention(thin) () -> @error Error
  %8 = try_apply %7() : $@convention(thin) () -> @error Error, normal bb1, error bb2

bb1(%15: $()):
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()

bb2(%9: $Error):
  strong_release %5 : $Foo
  throw  %9: $Error
}
