// RUN: %target-sil-opt  %s -verify -closure-specialize -o -  | %FileCheck %s

// Make sure we do not specialize resilientCallee.

sil_stage canonical

import Builtin
import Swift
import SwiftShims

@_optimize(none) public func action()

@inline(__always) public func fragileCaller()

public func resilientCallee(fn: () -> ())

// action()
sil [Onone] @$s26closure_specialize_fragile6actionyyF : $@convention(thin) () -> () {
bb0:
  %0 = tuple ()
  return %0 : $()
} // end sil function '$s26closure_specialize_fragile6actionyyF'

// CHECK-LABEL: sil [serialized] [always_inline] @$s26closure_specialize_fragile0C6CalleryyF : $@convention(thin) () -> ()
// CHECK: function_ref @$s26closure_specialize_fragile15resilientCalleeyyyc2fn_tF : $@convention(thin) (@owned @callee_owned () -> ()) -> ()
// CHECK: return
// fragileCaller()
sil [serialized] [always_inline] @$s26closure_specialize_fragile0C6CalleryyF : $@convention(thin) () -> () {
bb0:
  // function_ref resilientCallee(fn:)
  %0 = function_ref @$s26closure_specialize_fragile15resilientCalleeyyyc2fn_tF : $@convention(thin) (@owned @callee_owned () -> ()) -> ()
  // function_ref closure #1 in fragileCaller()
  %1 = function_ref @$s26closure_specialize_fragile0C6CalleryyFyycfU_ : $@convention(thin) () -> () 
  %2 = thin_to_thick_function %1 : $@convention(thin) () -> () to $@callee_owned () -> () 
  %3 = apply %0(%2) : $@convention(thin) (@owned @callee_owned () -> ()) -> ()
  %4 = tuple ()
  return %4 : $()
} // end sil function '$s26closure_specialize_fragile0C6CalleryyF'

// CHECK-LABEL: sil @$s26closure_specialize_fragile15resilientCalleeyyyc2fn_tF : $@convention(thin) (@owned @callee_owned () -> ()) -> ()

// resilientCallee(fn:)
sil @$s26closure_specialize_fragile15resilientCalleeyyyc2fn_tF : $@convention(thin) (@owned @callee_owned () -> ()) -> () {
bb0(%0 : $@callee_owned () -> ()):
  strong_retain %0 : $@callee_owned () -> ()
  %3 = apply %0() : $@callee_owned () -> ()
  strong_release %0 : $@callee_owned () -> ()
  %5 = tuple ()
  return %5 : $()
} // end sil function '$s26closure_specialize_fragile15resilientCalleeyyyc2fn_tF'

// closure #1 in fragileCaller()
sil shared [serialized] @$s26closure_specialize_fragile0C6CalleryyFyycfU_ : $@convention(thin) () -> () {
bb0:
  // function_ref action()
  %0 = function_ref @$s26closure_specialize_fragile6actionyyF : $@convention(thin) () -> () 
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
} // end sil function '$s26closure_specialize_fragile0C6CalleryyFyycfU_'
