@@ -29,22 +29,25 @@ func unavailableInDynamicDomain() { } // expected-note * {{'unavailableInDynamic
2929@available ( UnknownDomain) // expected-error {{unrecognized platform name 'UnknownDomain'}}
3030func availableInUnknownDomain( ) { }
3131
32- func testDeployment( ) {
32+ func testDeployment( ) { // expected-note 2 {{add '@available' attribute to enclosing global function}}
3333 alwaysAvailable ( )
3434 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
35+ // expected-note@-1 {{add 'if #available' version check}}
3536 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
3637 unavailableInDisabledDomain ( ) // expected-error {{'unavailableInDisabledDomain()' is unavailable}}
3738 deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
3839 unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
3940 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
41+ // expected-note@-1 {{add 'if #available' version check}}
4042 availableInUnknownDomain ( )
4143}
4244
43- func testIfAvailable( _ truthy: Bool ) {
45+ func testIfAvailable( _ truthy: Bool ) { // expected-note 9 {{add '@available' attribute to enclosing global function}}
4446 if #available( EnabledDomain) { // expected-note {{enclosing scope here}}
4547 availableInEnabledDomain ( )
4648 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
4749 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
50+ // expected-note@-1 {{add 'if #available' version check}}
4851 unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
4952
5053 if #available( DynamicDomain) {
@@ -56,6 +59,7 @@ func testIfAvailable(_ truthy: Bool) {
5659 availableInEnabledDomain ( )
5760 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
5861 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
62+ // expected-note@-1 {{add 'if #available' version check}}
5963 unavailableInDynamicDomain ( )
6064 }
6165
@@ -66,12 +70,15 @@ func testIfAvailable(_ truthy: Bool) {
6670 availableInEnabledDomain ( )
6771 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
6872 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
73+ // expected-note@-1 {{add 'if #available' version check}}
6974 unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
7075 }
7176 } else {
7277 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
78+ // expected-note@-1 {{add 'if #available' version check}}
7379 unavailableInEnabledDomain ( )
7480 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
81+ // expected-note@-1 {{add 'if #available' version check}}
7582 unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
7683 }
7784
@@ -84,8 +91,10 @@ func testIfAvailable(_ truthy: Bool) {
8491 // In this branch, we only know that one of the domains is unavailable,
8592 // but we don't know which.
8693 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
94+ // expected-note@-1 {{add 'if #available' version check}}
8795 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
8896 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
97+ // expected-note@-1 {{add 'if #available' version check}}
8998 unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
9099 }
91100
@@ -96,11 +105,13 @@ func testIfAvailable(_ truthy: Bool) {
96105 // In this branch, the state of EnabledDomain remains unknown since
97106 // execution will reach here if "truthy" is false.
98107 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
108+ // expected-note@-1 {{add 'if #available' version check}}
99109 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
100110 }
101111
102112 if #unavailable( EnabledDomain) {
103113 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
114+ // expected-note@-1 {{add 'if #available' version check}}
104115 unavailableInEnabledDomain ( )
105116 } else {
106117 availableInEnabledDomain ( )
@@ -113,7 +124,7 @@ func testIfAvailable(_ truthy: Bool) {
113124 }
114125}
115126
116- func testWhileAvailable( ) {
127+ func testWhileAvailable( ) { // expected-note {{add '@available' attribute to enclosing global function}}
117128 while #available( EnabledDomain) { // expected-note {{enclosing scope here}}
118129 availableInEnabledDomain ( )
119130 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
@@ -124,32 +135,36 @@ func testWhileAvailable() {
124135
125136 while #unavailable( EnabledDomain) {
126137 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
138+ // expected-note@-1 {{add 'if #available' version check}}
127139 unavailableInEnabledDomain ( )
128140
129141 if #available( EnabledDomain) { } // FIXME: [availability] Diagnose as unreachable
130142 if #unavailable( EnabledDomain) { } // FIXME: [availability] Diagnose as redundant
131143 }
132144}
133145
134- func testGuardAvailable( ) {
146+ func testGuardAvailable( ) { // expected-note 3 {{add '@available' attribute to enclosing global function}}
135147 guard #available( EnabledDomain) else { // expected-note {{enclosing scope here}}
136148 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
149+ // expected-note@-1 {{add 'if #available' version check}}
137150 unavailableInEnabledDomain ( )
138151 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
152+ // expected-note@-1 {{add 'if #available' version check}}
139153
140154 return
141155 }
142156
143157 availableInEnabledDomain ( )
144158 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
145159 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
160+ // expected-note@-1 {{add 'if #available' version check}}
146161
147162 if #available( EnabledDomain) { } // expected-warning {{unnecessary check for 'EnabledDomain'; enclosing scope ensures guard will always be true}}
148163 if #unavailable( EnabledDomain) { } // FIXME: [availability] Diagnose as unreachable
149164}
150165
151166@available ( EnabledDomain)
152- func testEnabledDomainAvailable( ) { // expected-note {{enclosing scope here}}
167+ func testEnabledDomainAvailable( ) { // expected-note {{add '@available' attribute to enclosing global function}} expected-note {{ enclosing scope here}}
153168 availableInEnabledDomain ( )
154169 unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
155170
@@ -160,12 +175,14 @@ func testEnabledDomainAvailable() { // expected-note {{enclosing scope here}}
160175 unavailableInDisabledDomain ( ) // expected-error {{'unavailableInDisabledDomain()' is unavailable}}
161176 deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
162177 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
178+ // expected-note@-1 {{add 'if #available' version check}}
163179 availableInUnknownDomain ( )
164180}
165181
166182@available ( EnabledDomain, unavailable)
167- func testEnabledDomainUnavailable( ) {
183+ func testEnabledDomainUnavailable( ) { // expected-note {{add '@available' attribute to enclosing global function}}
168184 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
185+ // expected-note@-1 {{add 'if #available' version check}}
169186 unavailableInEnabledDomain ( )
170187
171188 if #available( EnabledDomain) { } // FIXME: [availability] Diagnose as unreachable
@@ -175,6 +192,7 @@ func testEnabledDomainUnavailable() {
175192 unavailableInDisabledDomain ( ) // expected-error {{'unavailableInDisabledDomain()' is unavailable}}
176193 deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
177194 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
195+ // expected-note@-1 {{add 'if #available' version check}}
178196 availableInUnknownDomain ( )
179197}
180198
@@ -184,9 +202,11 @@ func testUniversallyUnavailable() {
184202 // FIXME: [availability] Diagnostic consistency: potentially unavailable declaration shouldn't be diagnosed
185203 // in contexts that are unavailable to broader domains
186204 availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
205+ // expected-note@-1 {{add 'if #available' version check}}
187206 unavailableInDisabledDomain ( )
188207 deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
189208 availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
209+ // expected-note@-1 {{add 'if #available' version check}}
190210 availableInUnknownDomain ( )
191211
192212 if #available( EnabledDomain) { } // FIXME: [availability] Diagnose?
@@ -205,6 +225,12 @@ struct EnabledDomainAvailable {
205225 }
206226}
207227
228+ func testFixIts( ) {
229+ // expected-note@-1 {{add '@available' attribute to enclosing global function}}{{1-1=@available(EnabledDomain)\n}}
230+ availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
231+ // expected-note@-1 {{add 'if #available' version check}}{{3-29=if #available(EnabledDomain) {\n availableInEnabledDomain()\n \} else {\n // Fallback\n \}}}
232+ }
233+
208234protocol P { }
209235
210236@available ( EnabledDomain)
0 commit comments