// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil %s -basic-instruction-property-dump -o /dev/null | %FileCheck %s

// REQUIRES: asserts

import Builtin

class X {
  @sil_stored var a: Builtin.Int32
  @sil_stored var x: X

  init()
  func foo()
}

class Y : X {}

sil_vtable X {}
sil_vtable Y {}

sil [readnone] @full_apply_site_effects_callee_1 : $@convention(thin) (@owned X) -> ()
sil [readnone] @full_apply_site_effects_callee_2 : $@convention(thin) (@owned X, @owned X, @owned X) -> ()

// CHECK-LABEL: @full_apply_site_effects
// CHECK: Inst #: 9
// CHECK:     apply
// CHECK:     Mem Behavior: None
// CHECK:     Release Behavior: MayRelease
// CHECK: Inst #: 10
// CHECK:     apply
// CHECK:     Mem Behavior: None
// CHECK:     Release Behavior: MayRelease
// CHECK: Inst #: 11
// CHECK:     apply
// CHECK:     Mem Behavior: None
// CHECK:     Release Behavior: MayRelease
// CHECK: Inst #: 12
// CHECK:     apply
// CHECK:     Mem Behavior: None
// CHECK:     Release Behavior: MayRelease
// CHECK: Inst #: 13
// CHECK:     apply
// CHECK:     Mem Behavior: None
// CHECK:     Release Behavior: MayRelease
// CHECK: Inst #: 14
// CHECK:     apply
// CHECK:     Mem Behavior: None
// CHECK:     Release Behavior: MayRelease
// CHECK: Inst #: 15
// CHECK:     apply
// CHECK:     Mem Behavior: MayHaveSideEffects
// CHECK:     Release Behavior: MayRelease
// CHECK: Inst #: 16
// CHECK: Inst #: 17
// CHECK:     apply
// CHECK:     Mem Behavior: None
// CHECK:     Release Behavior: MayRelease
sil @full_apply_site_effects : $@convention(thin) (@owned X) ->  () {
bb0(%0 : $X):
  %1 = function_ref @full_apply_site_effects_callee_1 : $@convention(thin) (@owned X) -> ()
  %2 = partial_apply %1(%0) : $@convention(thin) (@owned X) -> ()
  %3 = thin_to_thick_function %1 : $@convention(thin) (@owned X) -> () to $@callee_owned @convention(thick) (@owned X) -> ()
  %4 = function_ref @full_apply_site_effects_callee_2 : $@convention(thin) (@owned X, @owned X, @owned X) -> ()
  %5 = partial_apply %4(%0) : $@convention(thin) (@owned X, @owned X, @owned X) -> ()
  %6 = partial_apply %5(%0) : $@callee_owned @convention(thick) (@owned X, @owned X) -> ()
  %7 = partial_apply %6(%0) : $@callee_owned @convention(thick) (@owned X) -> ()
  %8 = class_method %0 : $X, #X.foo!1 : (X) -> () -> (), $@convention(method) (@guaranteed X) -> ()
  %9 = convert_function %6 : $@callee_owned @convention(thick) (@owned X) -> () to $@callee_owned @convention(thick) (@owned Y) -> ()

  apply %1(%0) : $@convention(thin) (@owned X) -> ()
  apply %2() : $@callee_owned @convention(thick) () -> ()
  apply %3(%0) : $@callee_owned @convention(thick) (@owned X) -> ()

  apply %5(%0, %0) : $@callee_owned @convention(thick) (@owned X, @owned X) -> ()
  apply %6(%0) : $@callee_owned @convention(thick) (@owned X) -> ()
  apply %7() : $@callee_owned @convention(thick) () -> ()

  // Make sure we properly handle full apply sites for which we can not
  // trivially find an absolute referenced function.
  apply %8(%0) : $@convention(method) (@guaranteed X) -> ()

  %10 = unchecked_ref_cast %0 : $X to $Y
  apply %9(%10) : $@callee_owned @convention(thick) (@owned Y) -> ()
  return undef : $()
}
