blob: 8e73fa17a8a181e89aabff7b8e34b80d8c35d878 [file] [log] [blame]
// RUN: %target-swift-emit-silgen -I %S/../IDE/Inputs/custom-modules %s | %FileCheck %s
// REQUIRES: objc_interop
import ImportAsMember.A
import ImportAsMember.Class
public func returnGlobalVar() -> Double {
return Struct1.globalVar
}
// CHECK-LABEL: sil {{.*}}returnGlobalVar{{.*}} () -> Double {
// CHECK: %0 = global_addr @IAMStruct1GlobalVar : $*Double
// CHECK: [[READ:%.*]] = begin_access [read] [dynamic] %0 : $*Double
// CHECK: [[VAL:%.*]] = load [trivial] [[READ]] : $*Double
// CHECK: return [[VAL]] : $Double
// CHECK-NEXT: }
// N.B. Whether by design or due to a bug, nullable NSString globals
// still import as non-null.
public func returnStringGlobalVar() -> String {
return Panda.cutenessFactor
}
// CHECK-LABEL: sil [ossa] {{.*}}returnStringGlobalVar{{.*}} () -> @owned String {
// CHECK: %0 = global_addr @PKPandaCutenessFactor : $*NSString
// CHECK: [[VAL:%.*]] = load [copy] %0 : $*NSString
// CHECK: [[BRIDGE:%.*]] = function_ref @$sSS10FoundationE36_unconditionallyBridgeFromObjectiveCySSSo8NSStringCSgFZ
// CHECK: [[RESULT:%.*]] = apply [[BRIDGE]](
// CHECK: return [[RESULT]] : $String
// CHECK-NEXT: }
public func returnNullableStringGlobalVar() -> String? {
return Panda.cuddlynessFactor
}
// CHECK-LABEL: sil [ossa] {{.*}}returnNullableStringGlobalVar{{.*}} () -> @owned Optional<String> {
// CHECK: %0 = global_addr @PKPandaCuddlynessFactor : $*NSString
// CHECK: [[VAL:%.*]] = load [copy] %0 : $*NSString
// CHECK: [[BRIDGE:%.*]] = function_ref @$sSS10FoundationE36_unconditionallyBridgeFromObjectiveCySSSo8NSStringCSgFZ
// CHECK: [[RESULT:%.*]] = apply [[BRIDGE]](
// CHECK: [[SOME:%.*]] = enum $Optional<String>, #Optional.some!enumelt.1, [[RESULT]]
// CHECK: return [[SOME]] : $Optional<String>
// CHECK-NEXT: }
// CHECK-LABEL: sil {{.*}}useClass{{.*}}
// CHECK: bb0([[D:%[0-9]+]] : $Double, [[OPTS:%[0-9]+]] : $SomeClass.Options):
public func useClass(d: Double, opts: SomeClass.Options) {
// CHECK: [[CTOR:%[0-9]+]] = function_ref @MakeIAMSomeClass : $@convention(c) (Double) -> @autoreleased SomeClass
// CHECK: [[OBJ:%[0-9]+]] = apply [[CTOR]]([[D]])
let o = SomeClass(value: d)
// CHECK: [[BORROWED_OBJ:%.*]] = begin_borrow [[OBJ]]
// CHECK: [[APPLY_FN:%[0-9]+]] = function_ref @IAMSomeClassApplyOptions : $@convention(c) (SomeClass, SomeClass.Options) -> ()
// CHECK: apply [[APPLY_FN]]([[BORROWED_OBJ]], [[OPTS]])
// CHECK: end_borrow [[BORROWED_OBJ]]
// CHECK: destroy_value [[OBJ]]
o.applyOptions(opts)
}
extension SomeClass {
// CHECK-LABEL: sil hidden [ossa] @$sSo12IAMSomeClassC16import_as_memberE6doubleABSd_tcfC
// CHECK: bb0([[DOUBLE:%[0-9]+]] : $Double
// CHECK-NOT: value_metatype
// CHECK: [[FNREF:%[0-9]+]] = function_ref @MakeIAMSomeClass
// CHECK: apply [[FNREF]]([[DOUBLE]])
convenience init(double: Double) {
self.init(value: double)
}
}
public func useSpecialInit() -> Struct1 {
// FIXME: the below triggers an assert, due to number or params mismatch
// return Struct1(specialLabel:())
}