Files
swift-mirror/test/Constraints/keypath_swift_5.swift
Sam Lazarus ed3eaef179 Sema / Test: Revert the error for assignment through read-only key path
This updates the error message so that in the case where we can find a
Decl, it gives the error "cannot assign through subscript: 'name' is a
read-only key path", and in the case where there's no associated Decl, gives the
error message "cannot assign through subscript: key path is read-only".

Additionally updates tests with the new error messages and formats all changes.
2019-05-04 14:03:06 -04:00

37 lines
1.1 KiB
Swift

// RUN: %target-swift-frontend -typecheck -verify %S/Inputs/keypath.swift -primary-file %s -swift-version 5
struct S {
let i: Int
init() {
let _: WritableKeyPath<S, Int> = \.i // expected-error {{cannot convert value of type 'KeyPath<S, Int>' to specified type 'WritableKeyPath<S, Int>'}}
S()[keyPath: \.i] = 1
// expected-error@-1 {{cannot assign through subscript: key path is read-only}}
}
}
func test() {
let _: WritableKeyPath<C, Int> = \.i // expected-error {{cannot convert value of type 'KeyPath<C, Int>' to specified type 'WritableKeyPath<C, Int>'}}
C()[keyPath: \.i] = 1
// expected-error@-1 {{cannot assign through subscript: key path is read-only}}
let _ = C()[keyPath: \.i] // no warning for a read
}
struct T {
private(set) var a: Int
init(a: Int) {
self.a = a
}
}
func testReadOnlyKeyPathDiagnostics() {
let path = \T.a
var t = T(a: 3)
t[keyPath: path] = 4 // expected-error {{cannot assign through subscript: 'path' is a read-only key path}}
t[keyPath: \T.a] = 4 // expected-error {{cannot assign through subscript: key path is read-only}}
}