@@ -141,3 +141,60 @@ func testAccessors() {
141
141
t. unavailableSetter = . init( ) // expected-error {{setter for 'unavailableSetter' is unavailable in macOS: bad setter}}
142
142
t. unavailableSetter. mutate ( ) // expected-error {{setter for 'unavailableSetter' is unavailable in macOS: bad setter}}
143
143
}
144
+
145
+ // Check available on extensions
146
+
147
+ @available ( macOS, unavailable)
148
+ extension TestStruct {
149
+ func unavailInExtension( ) { } // expected-note 2 {{'unavailInExtension()' has been explicitly marked unavailable here}}
150
+ }
151
+
152
+ @available ( macOS, obsoleted: 10.0 )
153
+ extension TestStruct {
154
+ func obsoletedInExtension( ) { } // expected-note 2 {{'obsoletedInExtension()' was obsoleted in macOS 10.0}}
155
+ }
156
+
157
+ @available ( macOS, deprecated: 10.0 )
158
+ extension TestStruct {
159
+ func deprecatedInExtension( ) { }
160
+ }
161
+
162
+ @available ( swift, introduced: 50.0 )
163
+ extension TestStruct {
164
+ func introducedInExtensionSwift( ) { } // expected-note 2 {{'introducedInExtensionSwift()' was introduced in Swift 50.0}}
165
+ }
166
+
167
+ @available ( macOS, introduced: 10.50 )
168
+ extension TestStruct {
169
+ func introducedInExtensionMacOS( ) { }
170
+ }
171
+
172
+ TestStruct ( ) . unavailInExtension ( ) // expected-error {{'unavailInExtension()' is unavailable in macOS}}
173
+ TestStruct ( ) . obsoletedInExtension ( ) // expected-error {{'obsoletedInExtension()' is unavailable}}
174
+ TestStruct ( ) . deprecatedInExtension ( ) // expected-warning {{'deprecatedInExtension()' was deprecated in macOS 10.0}}
175
+ TestStruct ( ) . introducedInExtensionSwift ( ) // expected-error {{'introducedInExtensionSwift()' is unavailable}}
176
+ TestStruct ( ) . introducedInExtensionMacOS ( ) // expected-error {{'introducedInExtensionMacOS()' is only available in macOS 10.50 or newer}}
177
+ // expected-note@-1{{add 'if #available' version check}}
178
+
179
+ extension TestStruct {
180
+ func availableFunc( ) {
181
+ unavailInExtension ( ) // expected-error {{'unavailInExtension()' is unavailable in macOS}}
182
+ obsoletedInExtension ( ) // expected-error {{'obsoletedInExtension()' is unavailable}}
183
+ deprecatedInExtension ( ) // expected-warning {{'deprecatedInExtension()' was deprecated in macOS 10.0}}
184
+ introducedInExtensionSwift ( ) // expected-error {{'introducedInExtensionSwift()' is unavailable}}
185
+ }
186
+ }
187
+
188
+ extension TestStruct { // expected-note{{add @available attribute to enclosing extension}}
189
+ func availableFuncMacOS( ) { // expected-note{{add @available attribute to enclosing instance method}}
190
+ introducedInExtensionMacOS ( ) // expected-error {{'introducedInExtensionMacOS()' is only available in macOS 10.50 or newer}}
191
+ // expected-note@-1{{add 'if #available' version check}}
192
+ }
193
+ }
194
+
195
+ @available ( macOS, introduced: 10.50 )
196
+ extension TestStruct {
197
+ func futureFuncMacOS( ) {
198
+ introducedInExtensionMacOS ( )
199
+ }
200
+ }
0 commit comments