| // RUN: %target-typecheck-verify-swift |
| |
| class Writer { |
| private var articleWritten = 47 |
| |
| func stop() { |
| let rest: () -> Void = { [weak self] in |
| let articleWritten = self?.articleWritten ?? 0 |
| guard let `self` = self else { |
| return |
| } |
| |
| self.articleWritten = articleWritten |
| } |
| |
| fatalError("I'm running out of time") |
| rest() |
| } |
| |
| func nonStop() { |
| let write: () -> Void = { [weak self] in |
| self?.articleWritten += 1 |
| |
| if let self = self { |
| self.articleWritten += 1 |
| } |
| |
| if let `self` = self { |
| self.articleWritten += 1 |
| } |
| |
| guard let self = self else { |
| return |
| } |
| |
| self.articleWritten += 1 |
| } |
| |
| write() |
| } |
| } |
| |
| struct T { |
| var mutable: Int = 0 |
| func f() { |
| // expected-error @+2 {{keyword 'self' cannot be used as an identifier here}} |
| // expected-note @+1 {{if this name is unavoidable, use backticks to escape it}} |
| let self = self |
| } |
| } |
| |
| class MyCls { |
| func something() {} |
| |
| func test() { |
| // expected-warning @+1 {{initialization of immutable value 'self' was never used}} |
| let `self` = Writer() // Even if `self` is shadowed, |
| something() // this should still refer `MyCls.something`. |
| } |
| } |