Files
swift-mirror/test/expr/unary/keypath/keypath-mutation.swift
Joe Groff 90377199cf Sema: Track ReferenceWritableKeyPath applications as reads of their base.
Fixes SR-5673 | rdar://problem/33881533.
2017-08-21 15:06:18 -07:00

36 lines
1.0 KiB
Swift

// RUN: %target-swift-frontend -typecheck -verify %s
struct User {
var id: Int
var name: String
}
func setting<Root, Value>(_ kp: WritableKeyPath<Root, Value>, _ root: Root, _ value: Value) -> Root {
var copy = root
// Should not warn about lack of mutation
copy[keyPath: kp] = value
return copy
}
func referenceSetting<Root, Value>(_ kp: ReferenceWritableKeyPath<Root, Value>, _ root: Root, _ value: Value) -> Root {
// Should warn about lack of mutation, since a RefKeyPath doesn't modify its
// base.
// expected-warning@+1 {{was never mutated}}
var copy = root
copy[keyPath: kp] = value
// Should not warn about lack of use of `immCopy`
let immCopy = root
immCopy[keyPath: kp] = value
return copy
}
func referenceUsage<Root, Value>(_ kp: ReferenceWritableKeyPath<Root, Value>, _ root: Root, _ value: Value) -> Root {
// Should warn about lack of mutation, since a RefKeyPath doesn't modify its
// base.
// expected-warning@+1 {{was never mutated}}
var copy = root
copy[keyPath: kp] = value
return copy
}