blob: 3525cb25cff4698433cb3d70840e964f4a428095 [file] [log] [blame]
// RUN: %target-sil-opt -enable-sil-verify-all %s -mandatory-inlining | %FileCheck %s
// REQUIRES: objc_interop
sil_stage raw
import Builtin
import Swift
import ObjectiveC
//////////////////
// Declarations //
//////////////////
class Klass : NSObject {}
///////////
// Tests //
///////////
// Test out functionality that we use to work around weird semantics of
// destructors.
sil [ossa] [transparent] @unmanaged_rr_callee : $@convention(thin) (@guaranteed Klass) -> () {
bb0(%0 : @guaranteed $Klass):
unmanaged_autorelease_value %0 : $Klass
%9999 = tuple()
return %9999 : $()
}
// CHECK-LABEL: sil @unmanaged_rr_caller : $@convention(thin) (@guaranteed Klass) -> () {
// CHECK: bb0([[ARG:%.*]] :
// CHECK-NEXT: autorelease_value [[ARG]]
// CHECK-NEXT: tuple
// CHECK-NEXT: tuple
// CHECK-NEXT: return
// CHECK: } // end sil function 'unmanaged_rr_caller'
sil @unmanaged_rr_caller : $@convention(thin) (@guaranteed Klass) -> () {
bb0(%0 : $Klass):
%1 = function_ref @unmanaged_rr_callee : $@convention(thin) (@guaranteed Klass) -> ()
apply %1(%0) : $@convention(thin) (@guaranteed Klass) -> ()
%9999 = tuple()
return %9999 : $()
}