From 5da4e2df40ad43aa3ea7cfbb96c4d448e50c508c Mon Sep 17 00:00:00 2001 From: Allan Shortlidge Date: Wed, 22 Mar 2023 12:37:50 -0700 Subject: [PATCH] Sema: Allow unavailable decls to witness requirements in more conformances. In https://github.com/apple/swift/pull/63898 conformance requirement typechecking was relaxed to allow unavailable decls to witness conformance requirements as long as the conforming nominal was also unavailable. However, only nominals that were directly marked unavailable were accepted. Nominals that are declared in unavailable scopes should also be allowed to have unavailable wintesses. Resolves rdar://107052715 --- lib/Sema/TypeCheckProtocol.cpp | 2 +- test/ModuleInterface/actor_availability.swift | 3 --- test/decl/protocol/req/unavailable.swift | 8 ++++++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/Sema/TypeCheckProtocol.cpp b/lib/Sema/TypeCheckProtocol.cpp index 11ed775786a..fdb56890015 100644 --- a/lib/Sema/TypeCheckProtocol.cpp +++ b/lib/Sema/TypeCheckProtocol.cpp @@ -1701,7 +1701,7 @@ RequirementCheck WitnessChecker::checkWitness(ValueDecl *requirement, } if (auto adoptingNominal = DC->getSelfNominalTypeDecl()) { - if (adoptingNominal->getAttrs().isUnavailable(getASTContext())) + if (adoptingNominal->getSemanticUnavailableAttr()) return true; } diff --git a/test/ModuleInterface/actor_availability.swift b/test/ModuleInterface/actor_availability.swift index adff0a8c6c2..f73f7cf1e8d 100644 --- a/test/ModuleInterface/actor_availability.swift +++ b/test/ModuleInterface/actor_availability.swift @@ -7,9 +7,6 @@ // REQUIRES: VENDOR=apple -// FIXME: rdar://107052715 temporarily disabled the test; fails on ios simulator -// REQUIRES: rdar107052715 - // CHECK: #if compiler(>=5.3) && $Actors // CHECK-NEXT: public actor ActorWithImplicitAvailability { public actor ActorWithImplicitAvailability { diff --git a/test/decl/protocol/req/unavailable.swift b/test/decl/protocol/req/unavailable.swift index 9dfc401453e..1e51ef8c27a 100644 --- a/test/decl/protocol/req/unavailable.swift +++ b/test/decl/protocol/req/unavailable.swift @@ -64,6 +64,14 @@ extension ConformsToP5: P { func foo(bar: Foo) { } } +@available(*, unavailable) +enum UnavailableEnum { + struct ConformsToP6: P { + @available(*, unavailable) + func foo(bar: Foo) { } + } +} + // Include message string from @available attribute if provided protocol Unavail { associatedtype T