Skip to content

Commit 309db1c

Browse files
committed
Sema: Update feature availability diagnostics to take AvailabilityDomain.
1 parent bc98209 commit 309db1c

File tree

4 files changed

+42
-41
lines changed

4 files changed

+42
-41
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6018,7 +6018,7 @@ ERROR(isolated_deinit_on_value_type,none,
60186018
())
60196019
ERROR(isolated_deinit_unavailable,none,
60206020
"isolated deinit is only available in %0 %1 or newer",
6021-
(StringRef, llvm::VersionTuple))
6021+
(AvailabilityDomain, llvm::VersionTuple))
60226022

60236023
//------------------------------------------------------------------------------
60246024
// MARK: String Processing
@@ -6033,7 +6033,7 @@ ERROR(regex_capture_types_failed_to_decode,none,
60336033

60346034
ERROR(regex_feature_unavailable, none,
60356035
"%0 is only available in %1 %2 or newer",
6036-
(StringRef, StringRef, llvm::VersionTuple))
6036+
(StringRef, AvailabilityDomain, llvm::VersionTuple))
60376037

60386038
ERROR(must_import_regex_builder_module,none,
60396039
"regex builder requires the 'RegexBuilder' module be imported'", ())
@@ -6848,40 +6848,40 @@ WARNING(availability_decl_only_version_newer_for_clients_warn, none,
68486848

68496849
ERROR(availability_opaque_types_only_version_newer, none,
68506850
"'some' return types are only available in %0 %1 or newer",
6851-
(StringRef, llvm::VersionTuple))
6851+
(AvailabilityDomain, llvm::VersionTuple))
68526852

68536853
ERROR(availability_concurrency_only_version_newer, none,
68546854
"concurrency is only available in %0 %1 or newer",
6855-
(StringRef, llvm::VersionTuple))
6855+
(AvailabilityDomain, llvm::VersionTuple))
68566856

68576857
ERROR(availability_parameterized_protocol_only_version_newer, none,
68586858
"runtime support for parameterized protocol types is only available in "
68596859
"%0 %1 or newer",
6860-
(StringRef, llvm::VersionTuple))
6860+
(AvailabilityDomain, llvm::VersionTuple))
68616861

68626862
ERROR(availability_isolated_any_only_version_newer, none,
68636863
"runtime support for @isolated(any) function types is only available in "
68646864
"%0 %1 or newer",
6865-
(StringRef, llvm::VersionTuple))
6865+
(AvailabilityDomain, llvm::VersionTuple))
68666866

68676867
ERROR(availability_copyable_generics_casting_only_version_newer, none,
68686868
"runtime support for casting types with noncopyable generic arguments "
68696869
"is only available in %0 %1 or newer",
6870-
(StringRef, llvm::VersionTuple))
6870+
(AvailabilityDomain, llvm::VersionTuple))
68716871

68726872
ERROR(availability_escapable_generics_casting_only_version_newer, none,
68736873
"runtime support for casting types with nonescapable generic arguments "
68746874
"is only available in %0 %1 or newer",
6875-
(StringRef, llvm::VersionTuple))
6875+
(AvailabilityDomain, llvm::VersionTuple))
68766876

68776877
ERROR(availability_typed_throws_only_version_newer, none,
68786878
"runtime support for typed throws function types is only available in "
68796879
"%0 %1 or newer",
6880-
(StringRef, llvm::VersionTuple))
6880+
(AvailabilityDomain, llvm::VersionTuple))
68816881

68826882
ERROR(availability_variadic_type_only_version_newer, none,
68836883
"parameter packs in generic types are only available in %0 %1 or newer",
6884-
(StringRef, llvm::VersionTuple))
6884+
(AvailabilityDomain, llvm::VersionTuple))
68856885

68866886
NOTE(availability_guard_with_version_check, none,
68876887
"add 'if #available' version check", ())
@@ -8263,7 +8263,7 @@ ERROR(value_generics_missing_feature,none,
82638263
"value generics require '-enable-experimental-feature ValueGenerics'", ())
82648264
ERROR(availability_value_generic_type_only_version_newer, none,
82658265
"values in generic types are only available in %0 %1 or newer",
8266-
(StringRef, llvm::VersionTuple))
8266+
(AvailabilityDomain, llvm::VersionTuple))
82678267
ERROR(invalid_value_for_type_same_type,none,
82688268
"cannot constrain type parameter %0 to be integer %1", (Type, Type))
82698269

lib/Sema/TypeCheckAttr.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,12 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
125125
}
126126

127127
TypeChecker::checkAvailability(
128-
attr->getRange(), C.getIsolatedDeinitAvailability(),
129-
D->getDeclContext(),
130-
[&](StringRef platformName, llvm::VersionTuple version) {
131-
return diagnoseAndRemoveAttr(attr, diag::isolated_deinit_unavailable, platformName, version);
132-
});
128+
attr->getRange(), C.getIsolatedDeinitAvailability(),
129+
D->getDeclContext(),
130+
[&](AvailabilityDomain domain, llvm::VersionTuple version) {
131+
return diagnoseAndRemoveAttr(
132+
attr, diag::isolated_deinit_unavailable, domain, version);
133+
});
133134
}
134135
}
135136

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2157,15 +2157,14 @@ static void fixAvailability(SourceRange ReferenceRange,
21572157

21582158
static void diagnosePotentialUnavailability(
21592159
SourceRange ReferenceRange,
2160-
llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
2160+
llvm::function_ref<InFlightDiagnostic(AvailabilityDomain,
2161+
llvm::VersionTuple)>
21612162
Diagnose,
21622163
const DeclContext *ReferenceDC, const AvailabilityRange &Availability) {
21632164
ASTContext &Context = ReferenceDC->getASTContext();
21642165

21652166
{
2166-
// FIXME: [availability] Update diagnostics to take an AvailabilityDomain.
2167-
auto Domain = Context.getTargetAvailabilityDomain();
2168-
auto Err = Diagnose(Domain.getNameForDiagnostics(),
2167+
auto Err = Diagnose(Context.getTargetAvailabilityDomain(),
21692168
Availability.getRawMinimumVersion());
21702169

21712170
// Direct a fixit to the error if an existing guard is nearly-correct
@@ -2176,11 +2175,12 @@ static void diagnosePotentialUnavailability(
21762175
fixAvailability(ReferenceRange, ReferenceDC, Availability, Context);
21772176
}
21782177

2179-
bool TypeChecker::checkAvailability(
2180-
SourceRange ReferenceRange, AvailabilityRange RequiredAvailability,
2181-
const DeclContext *ReferenceDC,
2182-
llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
2183-
Diagnose) {
2178+
bool TypeChecker::checkAvailability(SourceRange ReferenceRange,
2179+
AvailabilityRange RequiredAvailability,
2180+
const DeclContext *ReferenceDC,
2181+
llvm::function_ref<InFlightDiagnostic(
2182+
AvailabilityDomain, llvm::VersionTuple)>
2183+
Diagnose) {
21842184
ASTContext &ctx = ReferenceDC->getASTContext();
21852185
if (ctx.LangOpts.DisableAvailabilityChecking)
21862186
return false;
@@ -2197,16 +2197,15 @@ bool TypeChecker::checkAvailability(
21972197
return false;
21982198
}
21992199

2200-
bool TypeChecker::checkAvailability(SourceRange ReferenceRange,
2201-
AvailabilityRange RequiredAvailability,
2202-
Diag<StringRef, llvm::VersionTuple> Diag,
2203-
const DeclContext *ReferenceDC) {
2200+
bool TypeChecker::checkAvailability(
2201+
SourceRange ReferenceRange, AvailabilityRange RequiredAvailability,
2202+
Diag<AvailabilityDomain, llvm::VersionTuple> Diag,
2203+
const DeclContext *ReferenceDC) {
22042204
auto &Diags = ReferenceDC->getASTContext().Diags;
22052205
return TypeChecker::checkAvailability(
22062206
ReferenceRange, RequiredAvailability, ReferenceDC,
2207-
[&](StringRef platformName, llvm::VersionTuple version) {
2208-
return Diags.diagnose(ReferenceRange.Start, Diag, platformName,
2209-
version);
2207+
[&](AvailabilityDomain domain, llvm::VersionTuple version) {
2208+
return Diags.diagnose(ReferenceRange.Start, Diag, domain, version);
22102209
});
22112210
}
22122211

@@ -3236,7 +3235,7 @@ static bool checkInverseGenericsCastingAvailability(Type srcType,
32363235

32373236
if (auto boundTy = dyn_cast<BoundGenericType>(type)) {
32383237
if (auto missing = checkGenericArgsForInvertibleReqs(boundTy)) {
3239-
std::optional<Diag<StringRef, llvm::VersionTuple>> diag;
3238+
std::optional<Diag<AvailabilityDomain, llvm::VersionTuple>> diag;
32403239
switch (*missing) {
32413240
case InvertibleProtocolKind::Copyable:
32423241
diag =
@@ -3607,11 +3606,11 @@ class ExprAvailabilityWalker : public BaseDiagnosticWalker {
36073606
TypeChecker::checkAvailability(
36083607
RE->getSourceRange(), featureKind.getAvailability(Context),
36093608
Where.getDeclContext(),
3610-
[&](StringRef platformName, llvm::VersionTuple version) {
3609+
[&](AvailabilityDomain domain, llvm::VersionTuple version) {
36113610
auto range = feature.getRange();
36123611
auto diag = Context.Diags.diagnose(
36133612
range.getStart(), diag::regex_feature_unavailable,
3614-
featureKind.getDescription(Context), platformName, version);
3613+
featureKind.getDescription(Context), domain, version);
36153614
diag.highlightChars(range);
36163615
return diag;
36173616
});

lib/Sema/TypeChecker.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,15 +1040,16 @@ diagnosticIfDeclCannotBePotentiallyUnavailable(const Decl *D);
10401040
/// is allowed.
10411041
std::optional<Diagnostic> diagnosticIfDeclCannotBeUnavailable(const Decl *D);
10421042

1043-
bool checkAvailability(
1044-
SourceRange ReferenceRange, AvailabilityRange RequiredAvailability,
1045-
const DeclContext *ReferenceDC,
1046-
llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
1047-
Diagnose);
1043+
bool checkAvailability(SourceRange ReferenceRange,
1044+
AvailabilityRange RequiredAvailability,
1045+
const DeclContext *ReferenceDC,
1046+
llvm::function_ref<InFlightDiagnostic(
1047+
AvailabilityDomain, llvm::VersionTuple)>
1048+
Diagnose);
10481049

10491050
bool checkAvailability(SourceRange ReferenceRange,
10501051
AvailabilityRange RequiredAvailability,
1051-
Diag<StringRef, llvm::VersionTuple> Diag,
1052+
Diag<AvailabilityDomain, llvm::VersionTuple> Diag,
10521053
const DeclContext *ReferenceDC);
10531054

10541055
void checkConcurrencyAvailability(SourceRange ReferenceRange,

0 commit comments

Comments
 (0)