blob: 0936e9db1dc592c8bc688cc2b5bcf2aa70ee1046 [file] [log] [blame]
// RUN: %target-swift-emit-silgen -o /dev/null %s
func inoutFunc(_ x: inout Int) {}
// <rdar://22000564> Crash on Subscript taking a tuple argument list
class TupleSubscript {
subscript (position: (Int, Int)) -> Int {
get { return 32 }
set {}
}
subscript(native native: Int) -> Int {
get { return native }
set {}
}
subscript (position position: (Int, Int)) -> Int {
get { return 32 }
set {}
}
}
do {
let t = TupleSubscript()
_ = t[(1, 2)]
t[(1, 2)] = 3
inoutFunc(&t[(1, 2)])
_ = t[native: 0]
t[native: 0] = 1
inoutFunc(&t[native: 0])
_ = t[position: (1, 2)]
t[position: (1, 2)] = 1
inoutFunc(&t[position: (1, 2)])
}
// <rdar://problem/16189360> [DF] Assert on subscript with variadic parameter
class VariadicSubscript1 {
subscript(subs: Int...) -> Int {
get {
return 42
}
set {}
}
}
do {
let v = VariadicSubscript1()
_ = v[]
v[] = 0
inoutFunc(&v[])
_ = v[1]
v[1] = 0
inoutFunc(&v[1])
_ = v[0, 1, 2]
v[0, 1, 2] = 3
inoutFunc(&v[0, 1, 2])
}
class VariadicSubscript2 {
subscript(x: String, subs: Int...) -> Int {
get {
return 42
}
set {}
}
}
do {
let v = VariadicSubscript2()
_ = v[""]
v[""] = 0
inoutFunc(&v[""])
_ = v["", 0, 1, 2]
v["", 0, 1, 2] = 3
inoutFunc(&v["", 0, 1, 2])
}
struct VariadicSubscript3 {
subscript(indices: (Int, Int)...) -> Int {
get { return 0 }
set {}
}
}
do {
var b = VariadicSubscript3()
_ = b[]
b[] = 1
inoutFunc(&b[])
_ = b[(1, 2)]
b[(1,2)] = 1
inoutFunc(&b[(1,2)])
_ = b[(1, 2),(2,3)]
b[(1,2),(2,3)] = 1
inoutFunc(&b[(1,2),(2,3)])
}
// https://bugs.swift.org/browse/SR-1816
public struct Flags: OptionSet {
public var rawValue: Int
public init(rawValue: Int) { self.rawValue = rawValue }
public static let flag = Flags(rawValue: 1 << 0)
}
class VariadicSubscript4 {
subscript(_ values: Int..., flags flags: Flags) -> Int {
get { return 0 }
set { }
}
}
do {
let t = VariadicSubscript4()
_ = t[flags: .flag]
t[flags: .flag] = 0
inoutFunc(&t[flags: .flag])
_ = t[1, flags: .flag]
t[1, flags: .flag] = 0
inoutFunc(&t[1, flags: .flag])
_ = t[1, 2, 3, flags: .flag]
t[1, 2, 3, flags: .flag] = 0
inoutFunc(&t[1, 2, 3, flags: .flag])
}