Skip to content

Commit 17dfbf5

Browse files
committed
AST: Adopt SemanticAvailableAttr for SpecializeAttr.
1 parent f42ca1e commit 17dfbf5

File tree

4 files changed

+12
-10
lines changed

4 files changed

+12
-10
lines changed

include/swift/AST/Availability.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,8 @@ class AvailabilityInference {
380380
annotatedAvailableRange(const Decl *D);
381381

382382
static AvailabilityRange
383-
annotatedAvailableRangeForAttr(const SpecializeAttr *attr, ASTContext &ctx);
383+
annotatedAvailableRangeForAttr(const Decl *D, const SpecializeAttr *attr,
384+
ASTContext &ctx);
384385

385386
/// For the attribute's introduction version, update the platform and version
386387
/// values to the re-mapped platform's, if using a fallback platform.

lib/AST/Availability.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -791,15 +791,17 @@ bool Decl::requiresUnavailableDeclABICompatibilityStubs() const {
791791
}
792792

793793
AvailabilityRange AvailabilityInference::annotatedAvailableRangeForAttr(
794-
const SpecializeAttr *attr, ASTContext &ctx) {
794+
const Decl *D, const SpecializeAttr *attr, ASTContext &ctx) {
795795

796796
const AvailableAttr *bestAvailAttr = nullptr;
797797

798798
for (auto *availAttr : attr->getAvailableAttrs()) {
799-
if (availAttr == nullptr || !availAttr->Introduced.has_value() ||
800-
!availAttr->isActivePlatform(ctx) ||
801-
availAttr->isLanguageVersionSpecific() ||
802-
availAttr->isPackageDescriptionVersionSpecific()) {
799+
auto semanticAttr = D->getSemanticAvailableAttr(availAttr);
800+
if (!semanticAttr)
801+
continue;
802+
803+
if (!availAttr->Introduced.has_value() || !semanticAttr->isActive(ctx) ||
804+
!semanticAttr->isPlatformSpecific()) {
803805
continue;
804806
}
805807

lib/SIL/IR/SILFunctionBuilder.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,8 @@ void SILFunctionBuilder::addFunctionAttributes(
8989
if (hasSPI) {
9090
spiGroupIdent = spiGroups[0];
9191
}
92-
auto availability =
93-
AvailabilityInference::annotatedAvailableRangeForAttr(SA,
94-
M.getSwiftModule()->getASTContext());
92+
auto availability = AvailabilityInference::annotatedAvailableRangeForAttr(
93+
attributedFuncDecl, SA, M.getSwiftModule()->getASTContext());
9594
auto specializedSignature = SA->getSpecializedSignature(attributedFuncDecl);
9695
if (targetFunctionDecl) {
9796
SILDeclRef declRef(targetFunctionDecl, constant.kind, false);

lib/SILOptimizer/Transforms/GenericSpecializer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ static void transferSpecializeAttributeTargets(SILModule &M,
6060
spiGroupIdent = spiGroups[0];
6161
}
6262
auto availability = AvailabilityInference::annotatedAvailableRangeForAttr(
63-
SA, M.getSwiftModule()->getASTContext());
63+
vd, SA, M.getSwiftModule()->getASTContext());
6464

6565
auto *attr = SILSpecializeAttr::create(
6666
M, SA->getSpecializedSignature(vd), SA->getTypeErasedParams(),

0 commit comments

Comments
 (0)