@@ -8399,6 +8399,26 @@ SemanticAvailableAttrRequest::evaluate(swift::Evaluator &evaluator,
8399
8399
}
8400
8400
8401
8401
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
+ }
8402
8422
8403
8423
if (domain->isSwiftLanguage () || domain->isPackageDescription ()) {
8404
8424
switch (attr->getKind ()) {
@@ -8422,8 +8442,6 @@ SemanticAvailableAttrRequest::evaluate(swift::Evaluator &evaluator,
8422
8442
break ;
8423
8443
}
8424
8444
8425
- bool hasVersionSpec =
8426
- (introducedVersion || deprecatedVersion || obsoletedVersion);
8427
8445
if (!hasVersionSpec) {
8428
8446
diags.diagnose (attrLoc, diag::attr_availability_expected_version_spec,
8429
8447
attrName, domainName);
@@ -8447,7 +8465,7 @@ SemanticAvailableAttrRequest::evaluate(swift::Evaluator &evaluator,
8447
8465
mutableAttr->setRawObsoleted (canonicalizeVersion (*obsoletedVersion));
8448
8466
}
8449
8467
8450
- return SemanticAvailableAttr (attr) ;
8468
+ return semanticAttr ;
8451
8469
}
8452
8470
8453
8471
template <typename ATTR>
0 commit comments