blob: ada52a423d81a47f1b174b39eef69e2960eabbaa [file] [log] [blame]
// RUN: %target-swift-frontend -import-cf-types -sdk %S/Inputs %s -emit-silgen -o - | %FileCheck %s
// REQUIRES: objc_interop
import CoreCooling
// CHECK: sil hidden @_TF2cf8useEmAllFCSo16CCMagnetismModelT_ :
func useEmAll(_ model: CCMagnetismModel) {
// CHECK: function_ref @CCPowerSupplyGetDefault : $@convention(c) () -> @autoreleased Optional<CCPowerSupply>
let power = CCPowerSupplyGetDefault()
// CHECK: function_ref @CCRefrigeratorCreate : $@convention(c) (Optional<CCPowerSupply>) -> Optional<Unmanaged<CCRefrigerator>>
let unmanagedFridge = CCRefrigeratorCreate(power)
// CHECK: function_ref @CCRefrigeratorSpawn : $@convention(c) (Optional<CCPowerSupply>) -> @owned Optional<CCRefrigerator>
let managedFridge = CCRefrigeratorSpawn(power)
// CHECK: function_ref @CCRefrigeratorOpen : $@convention(c) (Optional<CCRefrigerator>) -> ()
CCRefrigeratorOpen(managedFridge)
// CHECK: function_ref @CCRefrigeratorCopy : $@convention(c) (Optional<CCRefrigerator>) -> @owned Optional<CCRefrigerator>
let copy = CCRefrigeratorCopy(managedFridge)
// CHECK: function_ref @CCRefrigeratorClone : $@convention(c) (Optional<CCRefrigerator>) -> @autoreleased Optional<CCRefrigerator>
let clone = CCRefrigeratorClone(managedFridge)
// CHECK: function_ref @CCRefrigeratorDestroy : $@convention(c) (@owned Optional<CCRefrigerator>) -> ()
CCRefrigeratorDestroy(clone)
// CHECK: class_method [volatile] %0 : $CCMagnetismModel, #CCMagnetismModel.refrigerator!1.foreign : (CCMagnetismModel) -> () -> Unmanaged<CCRefrigerator>! , $@convention(objc_method) (CCMagnetismModel) -> Optional<Unmanaged<CCRefrigerator>>
let f0 = model.refrigerator()
// CHECK: class_method [volatile] %0 : $CCMagnetismModel, #CCMagnetismModel.getRefrigerator!1.foreign : (CCMagnetismModel) -> () -> CCRefrigerator! , $@convention(objc_method) (CCMagnetismModel) -> @autoreleased Optional<CCRefrigerator>
let f1 = model.getRefrigerator()
// CHECK: class_method [volatile] %0 : $CCMagnetismModel, #CCMagnetismModel.takeRefrigerator!1.foreign : (CCMagnetismModel) -> () -> CCRefrigerator! , $@convention(objc_method) (CCMagnetismModel) -> @owned Optional<CCRefrigerator>
let f2 = model.takeRefrigerator()
// CHECK: class_method [volatile] %0 : $CCMagnetismModel, #CCMagnetismModel.borrowRefrigerator!1.foreign : (CCMagnetismModel) -> () -> CCRefrigerator! , $@convention(objc_method) (CCMagnetismModel) -> @autoreleased Optional<CCRefrigerator>
let f3 = model.borrowRefrigerator()
// CHECK: class_method [volatile] %0 : $CCMagnetismModel, #CCMagnetismModel.setRefrigerator!1.foreign : (CCMagnetismModel) -> (CCRefrigerator!) -> () , $@convention(objc_method) (Optional<CCRefrigerator>, CCMagnetismModel) -> ()
model.setRefrigerator(copy)
// CHECK: class_method [volatile] %0 : $CCMagnetismModel, #CCMagnetismModel.giveRefrigerator!1.foreign : (CCMagnetismModel) -> (CCRefrigerator!) -> () , $@convention(objc_method) (@owned Optional<CCRefrigerator>, CCMagnetismModel) -> ()
model.giveRefrigerator(copy)
// rdar://16846555
let prop: CCRefrigerator = model.fridgeProp
}
// Ensure that accessors are emitted for fields used as protocol witnesses.
protocol Impedance {
associatedtype Component
var real: Component { get }
var imag: Component { get }
}
extension CCImpedance: Impedance {}
// CHECK-LABEL: sil hidden [transparent] [fragile] [thunk] @_TTWVSC11CCImpedance2cf9ImpedanceS0_FS1_g4realwx9Component
// CHECK-LABEL: sil shared [transparent] [fragile] @_TFVSC11CCImpedanceg4realSd
// CHECK-LABEL: sil hidden [transparent] [fragile] [thunk] @_TTWVSC11CCImpedance2cf9ImpedanceS0_FS1_g4imagwx9Component
// CHECK-LABEL: sil shared [transparent] [fragile] @_TFVSC11CCImpedanceg4imagSd
class MyMagnetism : CCMagnetismModel {
// CHECK-LABEL: sil hidden [thunk] @_TToFC2cf11MyMagnetism15getRefrigerator{{.*}} : $@convention(objc_method) (MyMagnetism) -> @autoreleased CCRefrigerator
override func getRefrigerator() -> CCRefrigerator {
return super.getRefrigerator()
}
// CHECK-LABEL: sil hidden [thunk] @_TToFC2cf11MyMagnetism16takeRefrigerator{{.*}} : $@convention(objc_method) (MyMagnetism) -> @owned CCRefrigerator
override func takeRefrigerator() -> CCRefrigerator {
return super.takeRefrigerator()
}
// CHECK-LABEL: sil hidden [thunk] @_TToFC2cf11MyMagnetism18borrowRefrigerator{{.*}} : $@convention(objc_method) (MyMagnetism) -> @autoreleased CCRefrigerator
override func borrowRefrigerator() -> CCRefrigerator {
return super.borrowRefrigerator()
}
}