@@ -2098,15 +2098,15 @@ static void fixAvailability(SourceRange ReferenceRange,
20982098}
20992099
21002100static void diagnosePotentialUnavailability (
2101- SourceRange ReferenceRange, Diag<StringRef, llvm::VersionTuple> Diag,
2101+ SourceRange ReferenceRange,
2102+ llvm::function_ref<InFlightDiagnostic(StringRef, llvm::VersionTuple)>
2103+ Diagnose,
21022104 const DeclContext *ReferenceDC, const AvailabilityRange &Availability) {
21032105 ASTContext &Context = ReferenceDC->getASTContext ();
21042106
21052107 {
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 ());
21102110
21112111 // Direct a fixit to the error if an existing guard is nearly-correct
21122112 if (fixAvailabilityByNarrowingNearbyVersionCheck (
@@ -2116,10 +2116,11 @@ static void diagnosePotentialUnavailability(
21162116 fixAvailability (ReferenceRange, ReferenceDC, Availability, Context);
21172117}
21182118
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) {
21232124 ASTContext &ctx = ReferenceDC->getASTContext ();
21242125 if (ctx.LangOpts .DisableAvailabilityChecking )
21252126 return false ;
@@ -2128,14 +2129,27 @@ bool TypeChecker::checkAvailability(SourceRange ReferenceRange,
21282129 TypeChecker::overApproximateAvailabilityAtLocation (ReferenceRange.Start ,
21292130 ReferenceDC);
21302131 if (!availabilityAtLocation.isContainedIn (RequiredAvailability)) {
2131- diagnosePotentialUnavailability (ReferenceRange, Diag , ReferenceDC,
2132+ diagnosePotentialUnavailability (ReferenceRange, Diagnose , ReferenceDC,
21322133 RequiredAvailability);
21332134 return true ;
21342135 }
21352136
21362137 return false ;
21372138}
21382139
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+
21392153void TypeChecker::checkConcurrencyAvailability (SourceRange ReferenceRange,
21402154 const DeclContext *ReferenceDC) {
21412155 checkAvailability (
0 commit comments