@@ -35,15 +35,10 @@ fileprivate(set)
3535public
3636var customSetter2 = 0
3737
38- // FIXME: rdar://104931420 folowing should not error
39- // expected-error @+2{{cannot find 'package' in scope}}{{none}}
40- // expected-error @+1{{cannot find 'set' in scope; did you mean 'Set'?}}{{9-12=Set}}
4138package ( set)
4239public
4340var customSetter3 = 0
4441
45- // FIXME: rdar://104931420 folowing should not error
46- // expected-error @+1{{expected expression}}
4742public
4843package ( set)
4944var customSetter4 = 0
@@ -66,6 +61,14 @@ public(set) // expected-error {{duplicate modifier}}
6661private // expected-error {{duplicate modifier}}
6762var customSetterDuplicateAttrsAllAround = 0
6863
64+ private( set) // expected-note {{modifier already specified here}}
65+ package ( set) // expected-error {{duplicate modifier}}
66+ var customSetterDuplicateAttr2 = 0
67+
68+ package ( set) // expected-note {{modifier already specified here}}
69+ public( set) // expected-error {{duplicate modifier}}
70+ public var customSetterDuplicateAttr3 = 0
71+
6972private( get) // expected-error{{expected 'set' as subject of 'private' modifier}}
7073var invalidSubject = 0
7174
@@ -75,6 +78,13 @@ var invalidSubject2 = 0
7578private( a bunch of rando m tokens) // expected-error{{expected 'set' as subject of 'private' modifier}} expected-error{{expected declaration}}
7679var invalidSubject3 = 0
7780
81+
82+ package ( get) // expected-error{{expected 'set' as subject of 'package' modifier}}
83+ var invalidSubject4 = 0
84+
85+ package ( 42 ) // expected-error{{expected 'set' as subject of 'package' modifier}}
86+ var invalidSubject5 = 0
87+
7888private( set // expected-error{{expected ')' in 'private' modifier}}
7989var unterminatedSubject = 0
8090
@@ -132,7 +142,9 @@ private protocol TestProtocol {
132142public( set) func publicSetFunc( ) { } // expected-error {{'public' modifier cannot be applied to this declaration}} {{1-13=}}
133143
134144public( set) var defaultVis = 0 // expected-error {{internal variable cannot have a public setter}}
135-
145+ package ( set) var defaultVisPkg = 0 // expected-error {{internal variable cannot have a package setter}}
146+ package ( set) package var defaultVisPkgPkg = 0 // expected-warning {{'package(set)' modifier is redundant for a package var}}
147+ package ( set) public var defaultVisPkgOK = 0 // OK
136148internal( set) private var privateVis = 0 // expected-error {{private variable cannot have an internal setter}}
137149private( set) var defaultVisOK = 0
138150private( set) public var publicVis = 0
@@ -144,8 +156,15 @@ private(set) var computedRW: Int {
144156 get { return 42 }
145157 set { }
146158}
159+
160+ package ( set) public var computedPkg : Int { // expected-error {{'package(set)' modifier cannot be applied to read-only variables}} {{1-14=}}
161+ return 42
162+ }
163+
147164private( set) let constant = 42 // expected-error {{'private(set)' modifier cannot be applied to constants}} {{1-14=}}
148165
166+ package ( set) public let constantPkg = 42 // expected-error {{'package(set)' modifier cannot be applied to constants}} {{1-14=}}
167+
149168public struct Properties {
150169 private( set) var stored = 42
151170 private( set) var computed : Int { // expected-error {{'private(set)' modifier cannot be applied to read-only properties}} {{3-16=}}
@@ -155,14 +174,30 @@ public struct Properties {
155174 get { return 42 }
156175 set { }
157176 }
177+
178+ package ( set) public var computedRWPkg : Int {
179+ get { return 42 }
180+ set { }
181+ }
182+
183+ public package ( set) var computedR : Int { // expected-error {{'package(set)' modifier cannot be applied to read-only properties}} {{10-23=}}
184+ return 42
185+ }
186+
158187 private( set) let constant = 42 // expected-error {{'private(set)' modifier cannot be applied to read-only properties}} {{3-16=}}
188+ package ( set) public let constantPkg = 42 // expected-error {{'package(set)' modifier cannot be applied to read-only properties}} {{3-16=}}
189+ package ( set) var defaultVisPkg = 42 // expected-error {{internal property cannot have a package setter}}
159190 public( set) var defaultVis = 0 // expected-error {{internal property cannot have a public setter}}
160191 open( set) var defaultVis2 = 0 // expected-error {{internal property cannot have an open setter}}
161192
162193 public( set) subscript( a a: Int ) -> Int { // expected-error {{internal subscript cannot have a public setter}}
163194 get { return 0 }
164195 set { }
165196 }
197+ package ( set) subscript( p p: Int ) -> Int { // expected-error {{internal subscript cannot have a package setter}}
198+ get { return 0 }
199+ set { }
200+ }
166201 internal( set) private subscript( b b: Int ) -> Int { // expected-error {{private subscript cannot have an internal setter}}
167202 get { return 0 }
168203 set { }
@@ -180,6 +215,10 @@ public struct Properties {
180215}
181216
182217private extension Properties {
218+ package ( set) var extPropPkg : Int { // expected-error {{private property cannot have a package setter}}
219+ get { return 42 }
220+ set { }
221+ }
183222 public( set) var extProp : Int { // expected-error {{private property cannot have a public setter}}
184223 get { return 42 }
185224 set { }
@@ -198,11 +237,13 @@ private(set) extension Properties : EmptyProto2 {} // expected-error {{'private'
198237package protocol EmptyProto3 { }
199238package protocol EmptyProto4 { }
200239public protocol EmptyProto5 { }
240+ public protocol EmptyProto6 { }
201241
202242private extension Properties : EmptyProto3 { } // expected-error {{'private' modifier cannot be used with extensions that declare protocol conformances}} {{1-9=}}
203243private( set) extension Properties : EmptyProto4 { } // expected-error {{'private' modifier cannot be applied to this declaration}} {{1-14=}}
204244
205245package extension Properties : EmptyProto5 { } // expected-error {{'package' modifier cannot be used with extensions that declare protocol conformances}} {{1-9=}}
246+ package ( set) extension Properties : EmptyProto6 { } // expected-error {{'package' modifier cannot be applied to this declaration}} {{1-14=}}
206247
207248public struct PublicStruct { }
208249package struct PackageStruct { } // expected-note * {{declared here}}
0 commit comments