blob: ba083d33c802e8aa792fa5c98bfd2fe418f14023 [file] [log] [blame]
// RUN: %target-swift-emit-silgen %s | %FileCheck %s
struct Subscript1 {
subscript(_: Int = 0) -> Int {
get {}
set {}
}
}
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript1VyS2icipfA_ : $@convention(thin) () -> Int {
struct Subscript2 {
subscript(_ x: Int = 0) -> Int {
get {}
set {}
}
}
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript2VyS2icipfA_ : $@convention(thin) () -> Int {
struct Subscript3 {
subscript(x x: Int = 0) -> Int {
get {}
set {}
}
}
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript3V1xS2i_tcipfA_ : $@convention(thin) () -> Int {
struct Subscript4 {
subscript(_ x: Int, y y: Int = 0) -> Int {
get {}
set {}
}
}
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript4V_1yS2i_SitcipfA0_ : $@convention(thin) () -> Int {
struct Subscript5 {
subscript(x x: Int, y y: Int = 0) -> Int {
get {}
set {}
}
}
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript5V1x1yS2i_SitcipfA0_ : $@convention(thin) () -> Int {
func defaultArg<T>() -> T? { return nil }
struct Subscript6<T> {
subscript(x x: Int = 0, y y: T? = defaultArg()) -> Int {
get {}
set {}
}
}
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript6V1x1yS2i_xSgtcipfA_ : $@convention(thin) <T> () -> Int {
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript6V1x1yS2i_xSgtcipfA0_ : $@convention(thin) <T> () -> @out Optional<T> {
struct Subscript7<T> {
subscript<U>(x x: T? = defaultArg(), y y: U) -> Int {
get {}
set {}
}
}
// CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript7V1x1ySixSg_qd__tcluipfA_ : $@convention(thin) <T><U> () -> @out Optional<T> {
struct Subscript8 {
subscript(file: String = #file, line: Int = #line, function: String = #function) -> Int {
get {}
set {}
}
}
public protocol P {
associatedtype T
static func f() -> T
}
// Doesn't work yet
#if false
// FIXME-LABEL: sil hidden [ossa] @$s27subscript_default_arguments1PPAAEySi1TQzcipfA_ : $@convention(thin) <Self where Self : P> () -> @out Self.T {
extension P {
subscript(t: T = f()) -> Int {
get {}
set {}
}
}
struct Subscript9<T> : P {
static func f() -> T {}
}
#endif
// CHECK-LABEL: sil [ossa] @$s27subscript_default_arguments10subscript1yyF : $@convention(thin) () -> () {
public func subscript1() {
var s = Subscript1()
_ = s[]
s[] = 0
s[] += 1
}
public func subscript2() {
var s = Subscript2()
_ = s[]
s[] = 0
s[] += 1
}
public func subscript3() {
var s = Subscript3()
_ = s[]
s[] = 0
s[] += 1
}
public func subscript4() {
var s = Subscript4()
_ = s[0]
s[0] = 0
s[0] += 1
}
public func subscript5() {
var s = Subscript5()
_ = s[x: 0]
s[x: 0] = 0
s[x: 0] += 1
}
public func subscript6() {
var s = Subscript6<String>()
_ = s[]
s[] = 0
s[] += 1
}
public func subscript7() {
var s = Subscript7<String>()
_ = s[y: 123]
s[y: 123] = 0
s[y: 123] += 1
}
public func subscript8() {
var s = Subscript8()
_ = s[]
s[] = 0
s[] += 1
}
#if false
public func subscript9() {
var s = Subscript9<Int>()
_ = s[]
s[] = 0
s[] += 1
}
#endif