@@ -2584,7 +2584,8 @@ bool swift::diagnoseExplicitUnavailability(const ValueDecl *D, SourceRange R,
25842584bool swift::diagnoseExplicitUnavailability (SourceLoc loc,
25852585 const RootProtocolConformance *rootConf,
25862586 const ExtensionDecl *ext,
2587- const ExportContext &where) {
2587+ const ExportContext &where,
2588+ bool useConformanceAvailabilityErrorsOption) {
25882589 auto *attr = AvailableAttr::isUnavailable (ext);
25892590 if (!attr)
25902591 return false ;
@@ -2641,7 +2642,10 @@ bool swift::diagnoseExplicitUnavailability(SourceLoc loc,
26412642 diags.diagnose (loc, diag::conformance_availability_unavailable,
26422643 type, proto,
26432644 platform.empty (), platform, EncodedMessage.Message )
2644- .limitBehavior (behavior);
2645+ .limitBehavior (behavior)
2646+ .warnUntilSwiftVersionIf (useConformanceAvailabilityErrorsOption &&
2647+ !ctx.LangOpts .EnableConformanceAvailabilityErrors ,
2648+ 6 );
26452649
26462650 switch (attr->getVersionAvailability (ctx)) {
26472651 case AvailableVersionComparison::Available:
@@ -2995,7 +2999,8 @@ class ExprAvailabilityWalker : public ASTWalker {
29952999
29963000 if (auto EE = dyn_cast<ErasureExpr>(E)) {
29973001 for (ProtocolConformanceRef C : EE->getConformances ()) {
2998- diagnoseConformanceAvailability (E->getLoc (), C, Where);
3002+ diagnoseConformanceAvailability (E->getLoc (), C, Where, Type (), Type (),
3003+ /* useConformanceAvailabilityErrorsOpt=*/ true );
29993004 }
30003005 }
30013006
@@ -3791,7 +3796,8 @@ bool
37913796swift::diagnoseConformanceAvailability (SourceLoc loc,
37923797 ProtocolConformanceRef conformance,
37933798 const ExportContext &where,
3794- Type depTy, Type replacementTy) {
3799+ Type depTy, Type replacementTy,
3800+ bool useConformanceAvailabilityErrorsOption) {
37953801 assert (!where.isImplicit ());
37963802
37973803 if (!conformance.isConcrete ())
@@ -3825,12 +3831,14 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
38253831 };
38263832
38273833 if (auto *ext = dyn_cast<ExtensionDecl>(rootConf->getDeclContext ())) {
3828- if (TypeChecker::diagnoseConformanceExportability (loc, rootConf, ext, where)) {
3834+ if (TypeChecker::diagnoseConformanceExportability (loc, rootConf, ext, where,
3835+ useConformanceAvailabilityErrorsOption)) {
38293836 maybeEmitAssociatedTypeNote ();
38303837 return true ;
38313838 }
38323839
3833- if (diagnoseExplicitUnavailability (loc, rootConf, ext, where)) {
3840+ if (diagnoseExplicitUnavailability (loc, rootConf, ext, where,
3841+ useConformanceAvailabilityErrorsOption)) {
38343842 maybeEmitAssociatedTypeNote ();
38353843 return true ;
38363844 }
@@ -3858,7 +3866,8 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
38583866 SubstitutionMap subConformanceSubs =
38593867 concreteConf->getSubstitutions (DC->getParentModule ());
38603868 if (diagnoseSubstitutionMapAvailability (loc, subConformanceSubs, where,
3861- depTy, replacementTy))
3869+ depTy, replacementTy,
3870+ useConformanceAvailabilityErrorsOption))
38623871 return true ;
38633872
38643873 return false ;
@@ -3868,11 +3877,13 @@ bool
38683877swift::diagnoseSubstitutionMapAvailability (SourceLoc loc,
38693878 SubstitutionMap subs,
38703879 const ExportContext &where,
3871- Type depTy, Type replacementTy) {
3880+ Type depTy, Type replacementTy,
3881+ bool useConformanceAvailabilityErrorsOption) {
38723882 bool hadAnyIssues = false ;
38733883 for (ProtocolConformanceRef conformance : subs.getConformances ()) {
38743884 if (diagnoseConformanceAvailability (loc, conformance, where,
3875- depTy, replacementTy))
3885+ depTy, replacementTy,
3886+ useConformanceAvailabilityErrorsOption))
38763887 hadAnyIssues = true ;
38773888 }
38783889 return hadAnyIssues;
0 commit comments