// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s
sil_stage canonical

import Swift

// SR-3021: Ensure we pass the Self type metadata for Optional methods using the
// formal Optional type and not a lowered SIL type.

// CHECK-LABEL: @_TMaGSqFT_T__

sil @optional_method : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
sil @optional_witness_method : $@convention(witness_method) <T> (@in_guaranteed Optional<T>) -> ()

sil @call_optional_method_with_lowered_function : $@convention(thin) (@in_guaranteed Optional<@callee_owned (@in ()) -> @out ()>) -> () {
entry(%x : $*Optional<@callee_owned (@in ()) -> @out ()>):
  %f = function_ref @optional_method : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
  apply %f<() -> ()>(%x) : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
  %g = function_ref @optional_witness_method : $@convention(witness_method) <T> (@in_guaranteed Optional<T>) -> ()
  apply %g<() -> ()>(%x) : $@convention(witness_method) <T> (@in_guaranteed Optional<T>) -> ()
  %p = partial_apply %f<() -> ()>() : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
  %q = partial_apply %g<() -> ()>() : $@convention(witness_method) <T> (@in_guaranteed Optional<T>) -> ()
  return undef : $()
}

// SR-3548: Ensure we correctly emit "metadata for layout" for lowered Optional types.

sil @alloc_stack_optional_with_generic : $@convention(thin) <T> () -> () {
  %a = alloc_stack $*Optional<(T, @convention(thin) () -> ())>
  dealloc_stack %a : $*Optional<(T, @convention(thin) () -> ())>
  %t = tuple ()
  return %t : $()
}
