@@ -29,22 +29,25 @@ func unavailableInDynamicDomain() { } // expected-note * {{'unavailableInDynamic
29
29
@available ( UnknownDomain) // expected-error {{unrecognized platform name 'UnknownDomain'}}
30
30
func availableInUnknownDomain( ) { }
31
31
32
- func testDeployment( ) {
32
+ func testDeployment( ) { // expected-note 2 {{add '@available' attribute to enclosing global function}}
33
33
alwaysAvailable ( )
34
34
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
35
+ // expected-note@-1 {{add 'if #available' version check}}
35
36
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
36
37
unavailableInDisabledDomain ( ) // expected-error {{'unavailableInDisabledDomain()' is unavailable}}
37
38
deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
38
39
unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
39
40
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
41
+ // expected-note@-1 {{add 'if #available' version check}}
40
42
availableInUnknownDomain ( )
41
43
}
42
44
43
- func testIfAvailable( _ truthy: Bool ) {
45
+ func testIfAvailable( _ truthy: Bool ) { // expected-note 9 {{add '@available' attribute to enclosing global function}}
44
46
if #available( EnabledDomain) { // expected-note {{enclosing scope here}}
45
47
availableInEnabledDomain ( )
46
48
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
47
49
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
50
+ // expected-note@-1 {{add 'if #available' version check}}
48
51
unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
49
52
50
53
if #available( DynamicDomain) {
@@ -56,6 +59,7 @@ func testIfAvailable(_ truthy: Bool) {
56
59
availableInEnabledDomain ( )
57
60
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
58
61
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
62
+ // expected-note@-1 {{add 'if #available' version check}}
59
63
unavailableInDynamicDomain ( )
60
64
}
61
65
@@ -66,12 +70,15 @@ func testIfAvailable(_ truthy: Bool) {
66
70
availableInEnabledDomain ( )
67
71
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
68
72
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
73
+ // expected-note@-1 {{add 'if #available' version check}}
69
74
unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
70
75
}
71
76
} else {
72
77
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
78
+ // expected-note@-1 {{add 'if #available' version check}}
73
79
unavailableInEnabledDomain ( )
74
80
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
81
+ // expected-note@-1 {{add 'if #available' version check}}
75
82
unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
76
83
}
77
84
@@ -84,8 +91,10 @@ func testIfAvailable(_ truthy: Bool) {
84
91
// In this branch, we only know that one of the domains is unavailable,
85
92
// but we don't know which.
86
93
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
94
+ // expected-note@-1 {{add 'if #available' version check}}
87
95
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
88
96
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
97
+ // expected-note@-1 {{add 'if #available' version check}}
89
98
unavailableInDynamicDomain ( ) // expected-error {{'unavailableInDynamicDomain()' is unavailable}}
90
99
}
91
100
@@ -96,11 +105,13 @@ func testIfAvailable(_ truthy: Bool) {
96
105
// In this branch, the state of EnabledDomain remains unknown since
97
106
// execution will reach here if "truthy" is false.
98
107
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
108
+ // expected-note@-1 {{add 'if #available' version check}}
99
109
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
100
110
}
101
111
102
112
if #unavailable( EnabledDomain) {
103
113
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
114
+ // expected-note@-1 {{add 'if #available' version check}}
104
115
unavailableInEnabledDomain ( )
105
116
} else {
106
117
availableInEnabledDomain ( )
@@ -113,7 +124,7 @@ func testIfAvailable(_ truthy: Bool) {
113
124
}
114
125
}
115
126
116
- func testWhileAvailable( ) {
127
+ func testWhileAvailable( ) { // expected-note {{add '@available' attribute to enclosing global function}}
117
128
while #available( EnabledDomain) { // expected-note {{enclosing scope here}}
118
129
availableInEnabledDomain ( )
119
130
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
@@ -124,32 +135,36 @@ func testWhileAvailable() {
124
135
125
136
while #unavailable( EnabledDomain) {
126
137
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
138
+ // expected-note@-1 {{add 'if #available' version check}}
127
139
unavailableInEnabledDomain ( )
128
140
129
141
if #available( EnabledDomain) { } // FIXME: [availability] Diagnose as unreachable
130
142
if #unavailable( EnabledDomain) { } // FIXME: [availability] Diagnose as redundant
131
143
}
132
144
}
133
145
134
- func testGuardAvailable( ) {
146
+ func testGuardAvailable( ) { // expected-note 3 {{add '@available' attribute to enclosing global function}}
135
147
guard #available( EnabledDomain) else { // expected-note {{enclosing scope here}}
136
148
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
149
+ // expected-note@-1 {{add 'if #available' version check}}
137
150
unavailableInEnabledDomain ( )
138
151
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
152
+ // expected-note@-1 {{add 'if #available' version check}}
139
153
140
154
return
141
155
}
142
156
143
157
availableInEnabledDomain ( )
144
158
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
145
159
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
160
+ // expected-note@-1 {{add 'if #available' version check}}
146
161
147
162
if #available( EnabledDomain) { } // expected-warning {{unnecessary check for 'EnabledDomain'; enclosing scope ensures guard will always be true}}
148
163
if #unavailable( EnabledDomain) { } // FIXME: [availability] Diagnose as unreachable
149
164
}
150
165
151
166
@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}}
153
168
availableInEnabledDomain ( )
154
169
unavailableInEnabledDomain ( ) // expected-error {{'unavailableInEnabledDomain()' is unavailable}}
155
170
@@ -160,12 +175,14 @@ func testEnabledDomainAvailable() { // expected-note {{enclosing scope here}}
160
175
unavailableInDisabledDomain ( ) // expected-error {{'unavailableInDisabledDomain()' is unavailable}}
161
176
deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
162
177
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
178
+ // expected-note@-1 {{add 'if #available' version check}}
163
179
availableInUnknownDomain ( )
164
180
}
165
181
166
182
@available ( EnabledDomain, unavailable)
167
- func testEnabledDomainUnavailable( ) {
183
+ func testEnabledDomainUnavailable( ) { // expected-note {{add '@available' attribute to enclosing global function}}
168
184
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
185
+ // expected-note@-1 {{add 'if #available' version check}}
169
186
unavailableInEnabledDomain ( )
170
187
171
188
if #available( EnabledDomain) { } // FIXME: [availability] Diagnose as unreachable
@@ -175,6 +192,7 @@ func testEnabledDomainUnavailable() {
175
192
unavailableInDisabledDomain ( ) // expected-error {{'unavailableInDisabledDomain()' is unavailable}}
176
193
deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
177
194
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
195
+ // expected-note@-1 {{add 'if #available' version check}}
178
196
availableInUnknownDomain ( )
179
197
}
180
198
@@ -184,9 +202,11 @@ func testUniversallyUnavailable() {
184
202
// FIXME: [availability] Diagnostic consistency: potentially unavailable declaration shouldn't be diagnosed
185
203
// in contexts that are unavailable to broader domains
186
204
availableInEnabledDomain ( ) // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
205
+ // expected-note@-1 {{add 'if #available' version check}}
187
206
unavailableInDisabledDomain ( )
188
207
deprecatedInDynamicDomain ( ) // expected-warning {{'deprecatedInDynamicDomain()' is deprecated: Use something else}}
189
208
availableInDynamicDomain ( ) // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
209
+ // expected-note@-1 {{add 'if #available' version check}}
190
210
availableInUnknownDomain ( )
191
211
192
212
if #available( EnabledDomain) { } // FIXME: [availability] Diagnose?
@@ -205,6 +225,12 @@ struct EnabledDomainAvailable {
205
225
}
206
226
}
207
227
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
+
208
234
protocol P { }
209
235
210
236
@available ( EnabledDomain)
0 commit comments