File: diag_self_assign.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (171 lines) | stat: -rw-r--r-- 5,136 bytes parent folder | download
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
  }
}