mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
137 lines
2.2 KiB
Swift
137 lines
2.2 KiB
Swift
// 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://github.com/apple/swift/issues/44425
|
|
|
|
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])
|
|
}
|