mirror of
https://github.com/apple/swift.git
synced 2026-10-26 20:15:53 +01:00
The opaque values test coverage I initially added will emit to stdout, which is noisy for people's logs if the test is failing for some other reason.
62 lines
2.7 KiB
Swift
62 lines
2.7 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %build-silgen-test-overlays
|
|
|
|
// RUN: %target-swift-emit-silgen-ossa(mock-sdk: -sdk %S/Inputs -I %t) -o /dev/null -enable-sil-opaque-values -Xllvm -sil-print-types %s -emit-verbose-sil -disable-objc-attr-requires-foundation-module
|
|
// RUN: %target-swift-emit-silgen(mock-sdk: -sdk %S/Inputs -I %t) -Xllvm -sil-print-types %s -emit-verbose-sil -disable-objc-attr-requires-foundation-module | %FileCheck %s
|
|
|
|
// REQUIRES: objc_interop
|
|
|
|
import gizmo
|
|
|
|
@objc class ObjCClass {}
|
|
|
|
class A {
|
|
@objc dynamic subscript (i: Int) -> ObjCClass {
|
|
get {
|
|
return ObjCClass()
|
|
}
|
|
set {}
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [ossa] @$s14objc_subscript16testSubscriptGet{{[_0-9a-zA-Z]*}}F
|
|
func testSubscriptGet(a: A, i: Int) -> ObjCClass {
|
|
// CHECK: objc_method [[OBJ:%[0-9]+]] : $A, #A.subscript!getter.foreign : (A) -> (Int) -> ObjCClass, $@convention(objc_method) (Int, A) -> @autoreleased ObjCClass
|
|
return a[i]
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [ossa] @$s14objc_subscript16testSubscriptSet{{[_0-9a-zA-Z]*}}F
|
|
func testSubscriptSet(a: A, i: Int, v: ObjCClass) {
|
|
// CHECK: objc_method [[OBJ:%[0-9]+]] : $A, #A.subscript!setter.foreign : (A) -> (ObjCClass, Int) -> (), $@convention(objc_method) (ObjCClass, Int, A) -> ()
|
|
a[i] = v
|
|
}
|
|
|
|
// 'super' subscript usage
|
|
class B : A {
|
|
@objc override subscript (i: Int) -> ObjCClass {
|
|
// CHECK-LABEL: sil hidden [ossa] @$s14objc_subscript1BCyAA9ObjCClassCSicig : $@convention(method) (Int, @guaranteed B) -> @owned ObjCClass
|
|
get {
|
|
// CHECK: objc_super_method [[SELF:%[0-9]+]] : $B, #A.subscript!getter.foreign : (A) -> (Int) -> ObjCClass, $@convention(objc_method) (Int, A) -> @autoreleased ObjCClass
|
|
return super[i]
|
|
}
|
|
// CHECK-LABEL: sil hidden [ossa] @$s14objc_subscript1BCyAA9ObjCClassCSicis : $@convention(method) (@owned ObjCClass, Int, @guaranteed B) -> ()
|
|
set(value) {
|
|
// CHECK: objc_super_method [[SELF:%[0-9]+]] : $B, #A.subscript!setter.foreign : (A) -> (ObjCClass, Int) -> (), $@convention(objc_method) (ObjCClass, Int, A) -> ()
|
|
super[i] = value
|
|
}
|
|
}
|
|
}
|
|
|
|
protocol SubscriptProto {
|
|
subscript(i: Int) -> Any! { get }
|
|
}
|
|
extension Guisemeau: SubscriptProto {}
|
|
|
|
// CHECK-LABEL: sil private [transparent] [thunk] [ossa] @$sSo9GuisemeauC14objc_subscript14SubscriptProtoA2cDPyypSgSicigTW
|
|
// CHECK: function_ref @$sSo9GuisemeauCyypSgSicigTO
|
|
// CHECK: end sil function '$sSo9GuisemeauC14objc_subscript14SubscriptProtoA2cDPyypSgSicigTW'
|
|
|
|
// CHECK-LABEL: sil shared [serialized] [thunk] [ossa] @$sSo9GuisemeauCyypSgSicigTO
|
|
// CHECK: objc_method {{%[0-9]+}} : $Guisemeau, #Guisemeau.subscript!getter.foreign : (Guisemeau) -> (Int) -> Any?, $@convention(objc_method) (Int, Guisemeau) -> @autoreleased Optional<AnyObject>
|
|
// CHECK: end sil function '$sSo9GuisemeauCyypSgSicigTO'
|