1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
// RUN: %target-typecheck-verify-swift -disable-availability-checking
var global: Int = 5
func testGlobal() {
let _ = copy global
}
func testLet() {
let t = String()
let _ = copy t
}
func testVar() {
var t = String()
t = String()
let _ = copy t
}
func copy() {}
func copy(_: String) {}
func copy(_: String, _: Int) {}
func copy(x: String, y: Int) {}
// Ensure that we can still call a function named copy.
func useCopyFunc() {
var s = String()
var i = global
copy()
copy(s)
copy(i) // expected-error{{cannot convert value of type 'Int' to expected argument type 'String'}}
copy(s, i)
copy(i, s) // expected-error{{unnamed argument #2 must precede unnamed argument #1}}
copy(x: s, y: i)
copy(y: i, x: s) // expected-error{{argument 'x' must precede argument 'y'}}
}
// Ensure that we can still use a variable named copy.
func useCopyVar(copy: inout String) {
let s = copy
copy = s
// We can copy from a variable named `copy`
let t = copy copy
copy = t
// We can do member access and subscript a variable named `copy`
let i = copy.startIndex
let _ = copy[i]
}
@propertyWrapper
struct FooWrapper<T> {
var value: T
init(wrappedValue: T) { value = wrappedValue }
var wrappedValue: T {
get { value }
nonmutating set {}
}
var projectedValue: T {
get { value }
nonmutating set {}
}
}
struct Foo {
@FooWrapper var wrapperTest: String
func copySelf() {
_ = copy self
}
func copyPropertyWrapper() {
// Make sure that we can parse.
_ = copy wrapperTest // expected-error {{'copy' can only be applied to a local binding ('let', 'var', or parameter)}}
_ = copy _wrapperTest // expected-error {{'copy' can only be applied to a local binding ('let', 'var', or parameter)}}
_ = copy $wrapperTest // expected-error {{'copy' can only be applied to a local binding ('let', 'var', or parameter)}}
}
}
func testParseCopyWithDollarIdentifier() {
class Klass {}
let f: (Klass) -> () = {
let _ = copy $0
}
_ = f
}
func testParseCopySelf() {
class Klass {
func test() {
let _ = copy self
}
}
}
func testForLoop() {
for copy in 0..<1024 {
_ = copy
}
}
class ParentKlass {}
class ChildKlass : ParentKlass {}
func testAsBindingVariableInSwitch(_ x: ChildKlass) {
switch x {
case let copy as ParentKlass:
_ = copy
break
}
}
|