| // RUN: %target-typecheck-verify-swift |
| |
| struct S { |
| var x: Int = 0 |
| let y: Int = 0 // expected-note 4 {{change 'let' to 'var' to make it mutable}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} |
| |
| init() {} |
| } |
| |
| struct T { |
| var mutS: S? = nil |
| let immS: S? = nil // expected-note 10 {{change 'let' to 'var' to make it mutable}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} {{3-6=var}} |
| |
| init() {} |
| } |
| |
| var mutT: T? |
| let immT: T? = nil // expected-note 4 {{change 'let' to 'var' to make it mutable}} {{1-4=var}} {{1-4=var}} {{1-4=var}} {{1-4=var}} |
| |
| let mutTPayload = mutT! |
| |
| mutT! = T() |
| mutT!.mutS = S() |
| mutT!.mutS! = S() |
| mutT!.mutS!.x = 0 |
| mutT!.mutS!.y = 0 // expected-error{{cannot assign to property: 'y' is a 'let' constant}} |
| mutT!.immS = S() // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| mutT!.immS! = S() // expected-error{{cannot assign through '!': 'immS' is a 'let' constant}} |
| mutT!.immS!.x = 0 // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| mutT!.immS!.y = 0 // expected-error{{cannot assign to property: 'y' is a 'let' constant}} |
| |
| immT! = T() // expected-error{{cannot assign through '!': 'immT' is a 'let' constant}} |
| immT!.mutS = S() // expected-error{{cannot assign to property: 'immT' is a 'let' constant}} |
| immT!.mutS! = S() // expected-error{{cannot assign through '!': 'immT' is a 'let' constant}} |
| immT!.mutS!.x = 0 // expected-error{{cannot assign to property: 'immT' is a 'let' constant}} |
| immT!.mutS!.y = 0 // expected-error{{cannot assign to property: 'y' is a 'let' constant}} |
| immT!.immS = S() // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| immT!.immS! = S() // expected-error{{cannot assign through '!': 'immS' is a 'let' constant}} |
| immT!.immS!.x = 0 // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| immT!.immS!.y = 0 // expected-error{{cannot assign to property: 'y' is a 'let' constant}} |
| |
| var mutIUO: T! = nil |
| let immIUO: T! = nil // expected-note 2 {{change 'let' to 'var' to make it mutable}} {{1-4=var}} {{1-4=var}} |
| |
| mutIUO!.mutS = S() |
| mutIUO!.immS = S() // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| immIUO!.mutS = S() // expected-error{{cannot assign to property: 'immIUO' is a 'let' constant}} |
| immIUO!.immS = S() // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| |
| mutIUO.mutS = S() |
| mutIUO.immS = S() // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| immIUO.mutS = S() // expected-error{{cannot assign to property: 'immIUO' is a 'let' constant}} |
| immIUO.immS = S() // expected-error{{cannot assign to property: 'immS' is a 'let' constant}} |
| |
| func foo(x: Int) {} |
| |
| var nonOptional: S = S() |
| _ = nonOptional! // expected-error{{cannot force unwrap value of non-optional type 'S'}} {{16-17=}} |
| _ = nonOptional!.x // expected-error{{cannot force unwrap value of non-optional type 'S'}} {{16-17=}} |
| |
| class C {} |
| class D: C {} |
| |
| let c = C() |
| let d = (c as! D)! // expected-error{{cannot force unwrap value of non-optional type 'D'}} {{18-19=}} |