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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
// RUN: %target-typecheck-verify-swift
var sa1_global: Int
sa1_global = sa1_global // expected-error {{assigning a variable to itself}}
class SA1 {
var foo: Int = 0
init(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // expected-error {{assigning a property to itself}}
foo = self.foo // no-error
self.foo = foo // no-error
}
func f(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // expected-error {{assigning a property to itself}}
foo = self.foo // no-error
self.foo = foo // no-error
}
}
struct SA1a {
var foo: Int = 0
init(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // expected-error {{assigning a property to itself}}
foo = self.foo // no-error
self.foo = foo // no-error
}
mutating func f(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // expected-error {{assigning a property to itself}}
foo = self.foo // no-error
self.foo = foo // no-error
}
}
class SA2 {
var foo: Int {
get {
return 0
}
set {}
}
init(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // no-error
foo = self.foo // no-error
self.foo = foo // no-error
}
func f(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // no-error
foo = self.foo // no-error
self.foo = foo // no-error
}
}
struct SA2a {
var foo: Int {
get {
return 0
}
set {}
}
init(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // no-error
foo = self.foo // no-error
self.foo = foo // no-error
}
mutating func f(fooi: Int) {
var foo = fooi
foo = foo // expected-error {{assigning a variable to itself}}
self.foo = self.foo // no-error
foo = self.foo // no-error
self.foo = foo // no-error
}
}
class SA3 {
var foo: Int {
get {
return foo // expected-warning {{attempting to access 'foo' within its own getter}} expected-note{{access 'self' explicitly to silence this warning}} {{14-14=self.}}
}
set {
foo = foo // expected-warning {{attempting to modify 'foo' within its own setter}} expected-note{{access 'self' explicitly to silence this warning}} {{7-7=self.}} expected-warning{{setter argument 'newValue' was never used, but the property was accessed}} expected-note{{did you mean to use 'newValue' instead of accessing the property's current value?}}
self.foo = self.foo // no-error
foo = self.foo // expected-warning {{attempting to modify 'foo' within its own setter}} expected-note{{access 'self' explicitly to silence this warning}} {{7-7=self.}}
self.foo = foo
}
}
}
struct SA3a {
var foo: Int {
get {
return foo // expected-warning {{attempting to access 'foo' within its own getter}} expected-note{{access 'self' explicitly to silence this warning}} {{14-14=self.}}
}
set {
foo = foo // expected-warning {{attempting to modify 'foo' within its own setter}} expected-note{{access 'self' explicitly to silence this warning}} {{7-7=self.}} expected-warning{{setter argument 'newValue' was never used, but the property was accessed}} expected-note{{did you mean to use 'newValue' instead of accessing the property's current value?}}
self.foo = self.foo // no-error
foo = self.foo // expected-warning {{attempting to modify 'foo' within its own setter}} expected-note{{access 'self' explicitly to silence this warning}} {{7-7=self.}}
self.foo = foo
}
}
}
class SA4 {
var foo: Int {
get {
return foo // expected-warning {{attempting to access 'foo' within its own getter}} expected-note{{access 'self' explicitly to silence this warning}} {{14-14=self.}}
}
set(value) {
value = value // expected-error {{cannot assign to value: 'value' is a 'let' constant}}
}
}
}
struct SA4a {
var foo: Int {
get {
return foo // expected-warning {{attempting to access 'foo' within its own getter}} expected-note{{access 'self' explicitly to silence this warning}} {{14-14=self.}}
}
set(value) {
value = value // expected-error {{cannot assign to value: 'value' is a 'let' constant}}
}
}
}
class SA5 {
var foo: Int = 0
}
func SA5_test(a: SA5, b: SA5) {
a.foo = a.foo // expected-error {{assigning a property to itself}}
a.foo = b.foo
}
struct SA5a {
var foo: Int = 0
}
func SA5a_test(a: inout SA5, b: inout SA5) {
a.foo = a.foo // expected-error {{assigning a property to itself}}
a.foo = b.foo
}
class SA_Deep1 {
class Foo {
var aThing = String()
}
class Bar {
var aFoo = Foo()
}
var aFoo = Foo()
func test() {
let aBar = Bar()
aBar.aFoo = Foo()
aBar.aFoo.aThing = self.aFoo.aThing // no-error
}
}
|