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
|
// RUN: %target-typecheck-verify-swift
var global: () -> () = {}
struct Properties {
var property1: () -> () {
get {
return global
}
set {
global = newValue
}
}
var property2: () -> () {
get {
return global
}
set(value) {
global = value
}
}
}
func testProperties_property1(nonescaping: () -> (), // expected-note {{implicitly non-escaping}}
escaping: @escaping () -> ()) {
var p = Properties()
p.property1 = nonescaping // expected-error {{assigning non-escaping parameter}}
p.property1 = escaping
}
func testProperties_property2(nonescaping: () -> (), // expected-note {{implicitly non-escaping}}
escaping: @escaping () -> ()) {
var p = Properties()
p.property2 = nonescaping // expected-error {{assigning non-escaping parameter}}
p.property2 = escaping
}
struct Subscripts {
subscript(value1 fn: Int) -> () -> () {
get {
return global
}
set {
global = newValue
}
}
subscript(value2 fn: Int) -> () -> () {
get {
return global
}
set(value) {
global = value
}
}
subscript(nonescapingIndexWithAddressor fn: () -> Void) -> Int {
get {
return 0
}
unsafeMutableAddress {
fatalError()
}
}
// expected-note@+1 2 {{implicitly non-escaping}}
subscript(nonescapingIndex fn: () -> ()) -> Int {
get {
global = fn // expected-error {{assigning non-escaping parameter}}
return 0
}
set {
global = fn // expected-error {{assigning non-escaping parameter}}
}
}
subscript(escapingIndex fn: @escaping () -> ()) -> Int {
get {
global = fn
return 0
}
set {
global = fn
}
}
}
// expected-note@+1 {{implicitly non-escaping}}
func testSubscripts_value1(nonescaping: () -> (),
escaping: @escaping () -> ()) {
var s = Subscripts()
_ = s[value1: 0]
s[value1: 0] = escaping
s[value1: 0] = nonescaping // expected-error {{assigning non-escaping parameter}}
}
// expected-note@+1 {{implicitly non-escaping}}
func testSubscripts_value2(nonescaping: () -> (),
escaping: @escaping () -> ()) {
var s = Subscripts()
_ = s[value2: 0]
s[value2: 0] = escaping
s[value2: 0] = nonescaping // expected-error {{assigning non-escaping parameter}}
}
func testSubscripts_nonescapingIndex(nonescaping: () -> (),
escaping: @escaping () -> ()) {
var s = Subscripts()
_ = s[nonescapingIndex: nonescaping]
_ = s[nonescapingIndex: escaping]
s[nonescapingIndex: nonescaping] = 0
s[nonescapingIndex: escaping] = 0
}
// expected-note@+1 2 {{implicitly non-escaping}}
func testSubscripts_escapingIndex(nonescaping: () -> (),
escaping: @escaping () -> ()) {
var s = Subscripts()
_ = s[escapingIndex: nonescaping] // expected-error {{passing non-escaping parameter}}
_ = s[escapingIndex: escaping]
s[escapingIndex: nonescaping] = 0 // expected-error {{passing non-escaping parameter}}
s[escapingIndex: escaping] = 0
}
|