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
|
// RUN: %target-swift-frontend -emit-sil %s -o /dev/null -verify
// Test boolean operators with implicit closures
struct Simple {
let x: Bool // expected-note {{'self.x' not initialized}}
// expected-note @-1 {{'self.x' not initialized}}
let y: Bool
init() {
y = false || x // expected-error {{constant 'self.x' used before being initialized}}
} // expected-error {{return from initializer without initializing all stored properties}}
init(b: Bool) {
if b {
x = false
}
y = false || x // expected-error {{constant 'self.x' used before being initialized}}
} // expected-error {{return from initializer without initializing all stored properties}}
}
struct NestedClosures {
let x: Bool // expected-note {{'self.x' not initialized}}
let y: Bool
let z: Bool
init(_ a: Bool) {
y = false
z = false || (y || (x || a)) // expected-error {{constant 'self.x' used before being initialized}}
} // expected-error {{return from initializer without initializing all stored properties}}
}
class SimpleClass {
let x: Bool // expected-note {{'self.x' not initialized}}
let y: Bool
init() {
y = false || x // expected-error {{constant 'self.x' used before being initialized}}
} // expected-error {{return from initializer without initializing all stored properties}}
}
func forward(_ b: inout Bool) -> Bool {
return b
}
struct InoutUse {
var x: Bool
var y: Bool
init() {
y = false || forward(&x) // expected-error {{variable 'self.x' passed by reference before being initialized}}
}
}
protocol P {
var b: Bool { get }
}
struct Generic<T : P> {
let x: T // expected-note {{'self.x' not initialized}}
let y: Bool
init(_ t: T) {
y = false || x.b // expected-error {{constant 'self.x' used before being initialized}}
} // expected-error {{return from initializer without initializing all stored properties}}
}
|