
// RUN: %target-swift-frontend -emit-ir %s
sil_stage canonical

import Swift

public protocol Protocol {
  static func foo(_: Self?)
}

// 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 @call_optional_method_with_lowered_function : $@convention(thin) (@in_guaranteed Optional<@callee_guaranteed () -> @out ()>) -> () {
entry(%x : $*Optional<@callee_guaranteed () -> @out ()>):
  %f = function_ref @optional_method : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
  apply %f<() -> ()>(%x) : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
  %p = partial_apply [callee_guaranteed] %f<() -> ()>() : $@convention(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 : $()
}
