@@ -5122,6 +5122,13 @@ void AttributeChecker::checkBackDeployedAttrs(
51225122 ActiveAttr = AttrAndRange->first ;
51235123
51245124 for (auto *Attr : Attrs) {
5125+ auto Domain = Attr->getAvailabilityDomain ();
5126+ if (!Domain.isVersionValid (Attr->getParsedVersion ())) {
5127+ diagnose (Attr->getLocation (),
5128+ diag::availability_invalid_version_number_for_domain,
5129+ Attr->getParsedVersion (), Domain);
5130+ }
5131+
51255132 // Back deployment only makes sense for public declarations.
51265133 if (diagnoseAndRemoveAttrIfDeclIsNonPublic (Attr, /* isError=*/ true ))
51275134 continue ;
@@ -5169,7 +5176,7 @@ void AttributeChecker::checkBackDeployedAttrs(
51695176 }
51705177
51715178 auto AtLoc = Attr->AtLoc ;
5172- auto Platform = Attr->Platform ;
5179+ auto Platform = Attr->getPlatform () ;
51735180
51745181 if (!seenPlatforms.insert ({Platform, AtLoc}).second ) {
51755182 // We've seen the platform before, emit error to the previous one which
@@ -5210,9 +5217,8 @@ void AttributeChecker::checkBackDeployedAttrs(
52105217 D->getLoc (), D->getInnermostDeclContext ());
52115218
52125219 // Unavailable decls cannot be back deployed.
5213- auto backDeployedDomain = Attr->getAvailabilityDomain ();
5214- if (availability.containsUnavailableDomain (backDeployedDomain)) {
5215- auto domainForDiagnostics = backDeployedDomain;
5220+ if (availability.containsUnavailableDomain (Domain)) {
5221+ auto domainForDiagnostics = Domain;
52165222 llvm::VersionTuple ignoredVersion;
52175223
52185224 AvailabilityInference::updateBeforeAvailabilityDomainForFallback (
@@ -5244,7 +5250,7 @@ void AttributeChecker::checkBackDeployedAttrs(
52445250 if (auto availableRangeAttrPair =
52455251 getSemanticAvailableRangeDeclAndAttr (VD)) {
52465252 auto beforeDomain = Attr->getAvailabilityDomain ();
5247- auto beforeVersion = Attr->Version ;
5253+ auto beforeVersion = Attr->getVersion () ;
52485254 auto availableAttr = availableRangeAttrPair.value ().first ;
52495255 auto introVersion = availableAttr.getIntroduced ().value ();
52505256 AvailabilityDomain introDomain = availableAttr.getDomain ();
@@ -5254,7 +5260,7 @@ void AttributeChecker::checkBackDeployedAttrs(
52545260 AvailabilityInference::updateIntroducedAvailabilityDomainForFallback (
52555261 availableAttr, Ctx, introDomain, introVersion);
52565262
5257- if (Attr-> Version <= introVersion) {
5263+ if (beforeVersion <= introVersion) {
52585264 diagnose (AtLoc, diag::attr_has_no_effect_decl_not_available_before,
52595265 Attr, VD, beforeDomain, AvailabilityRange (beforeVersion));
52605266 diagnose (availableAttr.getParsedAttr ()->AtLoc ,
0 commit comments