@@ -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
@@ -3777,7 +3782,8 @@ bool
37773782swift::diagnoseConformanceAvailability (SourceLoc loc,
37783783 ProtocolConformanceRef conformance,
37793784 const ExportContext &where,
3780- Type depTy, Type replacementTy) {
3785+ Type depTy, Type replacementTy,
3786+ bool useConformanceAvailabilityErrorsOption) {
37813787 assert (!where.isImplicit ());
37823788
37833789 if (!conformance.isConcrete ())
@@ -3811,12 +3817,14 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
38113817 };
38123818
38133819 if (auto *ext = dyn_cast<ExtensionDecl>(rootConf->getDeclContext ())) {
3814- if (TypeChecker::diagnoseConformanceExportability (loc, rootConf, ext, where)) {
3820+ if (TypeChecker::diagnoseConformanceExportability (loc, rootConf, ext, where,
3821+ useConformanceAvailabilityErrorsOption)) {
38153822 maybeEmitAssociatedTypeNote ();
38163823 return true ;
38173824 }
38183825
3819- if (diagnoseExplicitUnavailability (loc, rootConf, ext, where)) {
3826+ if (diagnoseExplicitUnavailability (loc, rootConf, ext, where,
3827+ useConformanceAvailabilityErrorsOption)) {
38203828 maybeEmitAssociatedTypeNote ();
38213829 return true ;
38223830 }
@@ -3844,7 +3852,8 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
38443852 SubstitutionMap subConformanceSubs =
38453853 concreteConf->getSubstitutions (DC->getParentModule ());
38463854 if (diagnoseSubstitutionMapAvailability (loc, subConformanceSubs, where,
3847- depTy, replacementTy))
3855+ depTy, replacementTy,
3856+ useConformanceAvailabilityErrorsOption))
38483857 return true ;
38493858
38503859 return false ;
@@ -3854,11 +3863,13 @@ bool
38543863swift::diagnoseSubstitutionMapAvailability (SourceLoc loc,
38553864 SubstitutionMap subs,
38563865 const ExportContext &where,
3857- Type depTy, Type replacementTy) {
3866+ Type depTy, Type replacementTy,
3867+ bool useConformanceAvailabilityErrorsOption) {
38583868 bool hadAnyIssues = false ;
38593869 for (ProtocolConformanceRef conformance : subs.getConformances ()) {
38603870 if (diagnoseConformanceAvailability (loc, conformance, where,
3861- depTy, replacementTy))
3871+ depTy, replacementTy,
3872+ useConformanceAvailabilityErrorsOption))
38623873 hadAnyIssues = true ;
38633874 }
38643875 return hadAnyIssues;
0 commit comments