@@ -8399,6 +8399,26 @@ SemanticAvailableAttrRequest::evaluate(swift::Evaluator &evaluator,
83998399 }
84008400
84018401 auto domainName = domain->getNameForAttributePrinting ();
8402+ auto semanticAttr = SemanticAvailableAttr (attr);
8403+
8404+ bool hasVersionSpec =
8405+ (introducedVersion || deprecatedVersion || obsoletedVersion);
8406+
8407+ if (!domain->isVersioned () && hasVersionSpec) {
8408+ SourceRange versionSourceRange;
8409+ if (introducedVersion)
8410+ versionSourceRange = semanticAttr.getIntroducedSourceRange ();
8411+ else if (deprecatedVersion)
8412+ versionSourceRange = semanticAttr.getDeprecatedSourceRange ();
8413+ else if (obsoletedVersion)
8414+ versionSourceRange = semanticAttr.getObsoletedSourceRange ();
8415+
8416+ diags
8417+ .diagnose (attrLoc, diag::attr_availability_unexpected_version, attr,
8418+ domainName)
8419+ .highlight (versionSourceRange);
8420+ return std::nullopt ;
8421+ }
84028422
84038423 if (domain->isSwiftLanguage () || domain->isPackageDescription ()) {
84048424 switch (attr->getKind ()) {
@@ -8422,8 +8442,6 @@ SemanticAvailableAttrRequest::evaluate(swift::Evaluator &evaluator,
84228442 break ;
84238443 }
84248444
8425- bool hasVersionSpec =
8426- (introducedVersion || deprecatedVersion || obsoletedVersion);
84278445 if (!hasVersionSpec) {
84288446 diags.diagnose (attrLoc, diag::attr_availability_expected_version_spec,
84298447 attrName, domainName);
@@ -8447,7 +8465,7 @@ SemanticAvailableAttrRequest::evaluate(swift::Evaluator &evaluator,
84478465 mutableAttr->setRawObsoleted (canonicalizeVersion (*obsoletedVersion));
84488466 }
84498467
8450- return SemanticAvailableAttr (attr) ;
8468+ return semanticAttr ;
84518469}
84528470
84538471template <typename ATTR>
0 commit comments