@@ -2098,15 +2098,15 @@ static void fixAvailability(SourceRange ReferenceRange,
2098
2098
}
2099
2099
2100
2100
static void diagnosePotentialUnavailability (
2101
- SourceRange ReferenceRange, Diag<StringRef, llvm::VersionTuple> Diag,
2101
+ SourceRange ReferenceRange,
2102
+ llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
2103
+ Diagnose,
2102
2104
const DeclContext *ReferenceDC, const AvailabilityRange &Availability) {
2103
2105
ASTContext &Context = ReferenceDC->getASTContext ();
2104
2106
2105
2107
{
2106
- auto Err = Context.Diags .diagnose (
2107
- ReferenceRange.Start , Diag,
2108
- Context.getTargetPlatformStringForDiagnostics (),
2109
- Availability.getRawMinimumVersion ());
2108
+ auto Err = Diagnose (Context.getTargetPlatformStringForDiagnostics (),
2109
+ Availability.getRawMinimumVersion ());
2110
2110
2111
2111
// Direct a fixit to the error if an existing guard is nearly-correct
2112
2112
if (fixAvailabilityByNarrowingNearbyVersionCheck (
@@ -2116,10 +2116,11 @@ static void diagnosePotentialUnavailability(
2116
2116
fixAvailability (ReferenceRange, ReferenceDC, Availability, Context);
2117
2117
}
2118
2118
2119
- bool TypeChecker::checkAvailability (SourceRange ReferenceRange,
2120
- AvailabilityRange RequiredAvailability,
2121
- Diag<StringRef, llvm::VersionTuple> Diag,
2122
- const DeclContext *ReferenceDC) {
2119
+ bool TypeChecker::checkAvailability (
2120
+ SourceRange ReferenceRange, AvailabilityRange RequiredAvailability,
2121
+ const DeclContext *ReferenceDC,
2122
+ llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
2123
+ Diagnose) {
2123
2124
ASTContext &ctx = ReferenceDC->getASTContext ();
2124
2125
if (ctx.LangOpts .DisableAvailabilityChecking )
2125
2126
return false ;
@@ -2128,14 +2129,27 @@ bool TypeChecker::checkAvailability(SourceRange ReferenceRange,
2128
2129
TypeChecker::overApproximateAvailabilityAtLocation (ReferenceRange.Start ,
2129
2130
ReferenceDC);
2130
2131
if (!availabilityAtLocation.isContainedIn (RequiredAvailability)) {
2131
- diagnosePotentialUnavailability (ReferenceRange, Diag , ReferenceDC,
2132
+ diagnosePotentialUnavailability (ReferenceRange, Diagnose , ReferenceDC,
2132
2133
RequiredAvailability);
2133
2134
return true ;
2134
2135
}
2135
2136
2136
2137
return false ;
2137
2138
}
2138
2139
2140
+ bool TypeChecker::checkAvailability (SourceRange ReferenceRange,
2141
+ AvailabilityRange RequiredAvailability,
2142
+ Diag<StringRef, llvm::VersionTuple> Diag,
2143
+ const DeclContext *ReferenceDC) {
2144
+ auto &Diags = ReferenceDC->getASTContext ().Diags ;
2145
+ return TypeChecker::checkAvailability (
2146
+ ReferenceRange, RequiredAvailability, ReferenceDC,
2147
+ [&](StringRef platformName, llvm::VersionTuple version) {
2148
+ return Diags.diagnose (ReferenceRange.Start , Diag, platformName,
2149
+ version);
2150
+ });
2151
+ }
2152
+
2139
2153
void TypeChecker::checkConcurrencyAvailability (SourceRange ReferenceRange,
2140
2154
const DeclContext *ReferenceDC) {
2141
2155
checkAvailability (
0 commit comments