blob: 269c280bc6e9579debe0984cbeb8c263f701885b [file] [log] [blame]
// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test
// Check that subscripts and functions named subscript can exist side-by-side
struct Foo {
subscript() -> String {
return "instance subscript"
}
func `subscript`() -> String {
return "instance func"
}
static subscript() -> String {
return "static subscript"
}
static func `subscript`() -> String {
return "static func"
}
}
let f = Foo()
print(f[]) // CHECK: instance subscript
print(f.subscript()) // CHECK: instance func
print(Foo[]) // CHECK: static subscript
print(Foo.subscript()) // CHECK: static func
// SR-7418
protocol P {
subscript<T : Y>(_: T) -> Int { get set }
}
struct Q : P {
subscript<T : X>(_ idx: T) -> Int {
get { return 0 } set { idx.foo() }
}
}
protocol Y : X {}
protocol X { func foo() }
struct Idx : Y {
func foo() { print("I survived") }
}
func foo<T : P>(_ t: inout T) {
t[Idx()] += 1
}
var q = Q()
foo(&q) // CHECK: I survived
protocol PStatic {
static subscript<T : Y>(_: T) -> Int { get set }
}
struct QStatic : PStatic {
static subscript<T : X>(_ idx: T) -> Int {
get { return 0 } set { idx.foo() }
}
}
func fooStatic<T : PStatic>(_ t: T.Type) {
t[Idx()] += 1
}
fooStatic(QStatic.self) // CHECK: I survived