11// RUN: %empty-directory(%t)
2- // RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.9 -typecheck -verify %s
2+ // RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.50 -typecheck -verify %s
33
44// REQUIRES: OS=macosx
55
@@ -8,14 +8,14 @@ struct SetterConditionallyAvailable<T> {
88 var wrappedValue : T {
99 get { fatalError ( ) }
1010
11- @available ( macOS 10 . 10 , * )
11+ @available ( macOS 10 . 51 , * )
1212 set { fatalError ( ) }
1313 }
1414
1515 var projectedValue : T {
1616 get { fatalError ( ) }
1717
18- @available ( macOS 10 . 10 , * )
18+ @available ( macOS 10 . 51 , * )
1919 set { fatalError ( ) }
2020 }
2121}
@@ -25,14 +25,48 @@ struct ModifyConditionallyAvailable<T> {
2525 var wrappedValue : T {
2626 get { fatalError ( ) }
2727
28- @available ( macOS 10 . 10 , * )
28+ @available ( macOS 10 . 51 , * )
2929 _modify { fatalError ( ) }
3030 }
3131
3232 var projectedValue : T {
3333 get { fatalError ( ) }
3434
35- @available ( macOS 10 . 10 , * )
35+ @available ( macOS 10 . 51 , * )
36+ _modify { fatalError ( ) }
37+ }
38+ }
39+
40+ @propertyWrapper
41+ struct SetterMoreAvailable < T> {
42+ var wrappedValue : T {
43+ get { fatalError ( ) }
44+
45+ @available ( macOS 10 . 49 , * )
46+ set { fatalError ( ) }
47+ }
48+
49+ var projectedValue : T {
50+ get { fatalError ( ) }
51+
52+ @available ( macOS 10 . 49 , * )
53+ set { fatalError ( ) }
54+ }
55+ }
56+
57+ @propertyWrapper
58+ struct ModifyMoreAvailable < T> {
59+ var wrappedValue : T {
60+ get { fatalError ( ) }
61+
62+ @available ( macOS 10 . 49 , * )
63+ _modify { fatalError ( ) }
64+ }
65+
66+ var projectedValue : T {
67+ get { fatalError ( ) }
68+
69+ @available ( macOS 10 . 49 , * )
3670 _modify { fatalError ( ) }
3771 }
3872}
@@ -41,7 +75,7 @@ struct Butt {
4175 var modify_conditionally_available : Int {
4276 get { fatalError ( ) }
4377
44- @available ( macOS 10 . 10 , * )
78+ @available ( macOS 10 . 51 , * )
4579 _modify { fatalError ( ) }
4680 }
4781
@@ -50,16 +84,26 @@ struct Butt {
5084
5185 @ModifyConditionallyAvailable
5286 var wrapped_modify_conditionally_available : Int
87+
88+ @SetterMoreAvailable
89+ var wrapped_setter_more_available : Int
90+
91+ @ModifyMoreAvailable
92+ var wrapped_modify_more_available : Int
5393}
5494
55- func butt( x: inout Butt ) { // expected-note*{{}}
56- x. modify_conditionally_available = 0 // expected-error{{only available in macOS 10.10 or newer}} expected-note{{}}
57- x. wrapped_setter_conditionally_available = 0 // expected-error{{only available in macOS 10.10 or newer}} expected-note{{}}
58- x. wrapped_modify_conditionally_available = 0 // expected-error{{only available in macOS 10.10 or newer}} expected-note{{}}
59- x. $wrapped_setter_conditionally_available = 0 // expected-error{{only available in macOS 10.10 or newer}} expected-note{{}}
60- x. $wrapped_modify_conditionally_available = 0 // expected-error{{only available in macOS 10.10 or newer}} expected-note{{}}
95+ func butt( x: inout Butt ) { // expected-note * {{}}
96+ x. modify_conditionally_available = 0 // expected-error {{only available in macOS 10.51 or newer}} expected-note{{}}
97+ x. wrapped_setter_conditionally_available = 0 // expected-error {{only available in macOS 10.51 or newer}} expected-note{{}}
98+ x. wrapped_modify_conditionally_available = 0 // expected-error {{only available in macOS 10.51 or newer}} expected-note{{}}
99+ x. $wrapped_setter_conditionally_available = 0 // expected-error {{only available in macOS 10.51 or newer}} expected-note{{}}
100+ x. $wrapped_modify_conditionally_available = 0 // expected-error {{only available in macOS 10.51 or newer}} expected-note{{}}
101+ x. wrapped_setter_more_available = 0
102+ x. wrapped_modify_more_available = 0
103+ x. $wrapped_setter_more_available = 0
104+ x. $wrapped_modify_more_available = 0
61105
62- if #available( macOS 10 . 10 , * ) {
106+ if #available( macOS 10 . 51 , * ) {
63107 x. modify_conditionally_available = 0
64108 x. wrapped_setter_conditionally_available = 0
65109 x. wrapped_modify_conditionally_available = 0
@@ -68,6 +112,25 @@ func butt(x: inout Butt) { // expected-note*{{}}
68112 }
69113}
70114
115+ @available ( macOS, unavailable)
116+ extension Butt {
117+ @available ( iOS, unavailable)
118+ struct Nested { // expected-note {{has been explicitly marked unavailable here}}
119+ @SetterMoreAvailable
120+ var wrapped_setter_more_available : Int // expected-note 2 {{has been explicitly marked unavailable here}}
121+
122+ @ModifyMoreAvailable
123+ var wrapped_modify_more_available : Int // expected-note 2 {{has been explicitly marked unavailable here}}
124+ }
125+ }
126+
127+ func testButtNested( x: inout Butt . Nested ) { // expected-error {{'Nested' is unavailable in macOS}}
128+ x. wrapped_setter_more_available = 0 // expected-error {{is unavailable in macOS}}
129+ x. wrapped_modify_more_available = 0 // expected-error {{is unavailable in macOS}}
130+ x. $wrapped_setter_more_available = 0 // expected-error {{is unavailable in macOS}}
131+ x. $wrapped_modify_more_available = 0 // expected-error {{is unavailable in macOS}}
132+ }
133+
71134@available ( macOS 11 . 0 , * )
72135struct LessAvailable {
73136 @SetterConditionallyAvailable
0 commit comments