From 429f19a4b6b953de79aa9dc4e741772a0bad3ecd Mon Sep 17 00:00:00 2001 From: Allan Shortlidge Date: Wed, 21 Sep 2022 18:24:52 -0700 Subject: [PATCH 1/2] Revert "[ConstraintSystem] Extend availability check to cover unavailable extensions." This reverts commit 6de6de2e3a51741a047a9ec17ea33f4ea9d1ac24. --- lib/Sema/ConstraintSystem.cpp | 2 +- test/Constraints/availability.swift | 22 ---------------------- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/lib/Sema/ConstraintSystem.cpp b/lib/Sema/ConstraintSystem.cpp index 1558ddd586cff..69316147bfd3d 100644 --- a/lib/Sema/ConstraintSystem.cpp +++ b/lib/Sema/ConstraintSystem.cpp @@ -6540,7 +6540,7 @@ void ConstraintSystem::diagnoseFailureFor(SolutionApplicationTarget target) { bool ConstraintSystem::isDeclUnavailable(const Decl *D, ConstraintLocator *locator) const { // First check whether this declaration is universally unavailable. - if (AvailableAttr::isUnavailable(D)) + if (D->getAttrs().isUnavailable(getASTContext())) return true; return TypeChecker::isDeclarationUnavailable(D, DC, [&] { diff --git a/test/Constraints/availability.swift b/test/Constraints/availability.swift index 633724f168c33..2b8be52b55bc8 100644 --- a/test/Constraints/availability.swift +++ b/test/Constraints/availability.swift @@ -43,25 +43,3 @@ func unavailableFunction(_ x: Int) -> Bool { true } // expected-note {{'unavaila func f_55700(_ arr: [Int]) { for x in arr where unavailableFunction(x) {} // expected-error {{'unavailableFunction' is unavailable}} } - -// rdar://92364955 - ambiguity with member declared in unavailable extension - struct WithUnavailableExt { - } - - @available(*, unavailable) - extension WithUnavailableExt { - static var foo: WithUnavailableExt = WithUnavailableExt() - } - - func test_no_ambiguity_with_unavailable_ext() { - struct A { - static var foo: A = A() - } - - struct Test { - init(_: A) {} - init(_: WithUnavailableExt) {} - } - - _ = Test(.foo) // Ok `A.foo` since `foo` from `WithUnavailableExt` is unavailable - } From cddd86f709566d53e6e3a9a169425f5482893141 Mon Sep 17 00:00:00 2001 From: Allan Shortlidge Date: Tue, 1 Nov 2022 17:17:01 -0700 Subject: [PATCH 2/2] ConstraintSystem: Add a test case for rdar://101814209. --- test/Constraints/availability.swift | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/Constraints/availability.swift b/test/Constraints/availability.swift index 2b8be52b55bc8..6b134d67a350f 100644 --- a/test/Constraints/availability.swift +++ b/test/Constraints/availability.swift @@ -43,3 +43,24 @@ func unavailableFunction(_ x: Int) -> Bool { true } // expected-note {{'unavaila func f_55700(_ arr: [Int]) { for x in arr where unavailableFunction(x) {} // expected-error {{'unavailableFunction' is unavailable}} } + +// rdar://101814209 +public struct Box { + @usableFromInline + let value: T +} + +@available(macOS, unavailable) +extension Box where T == Int { + @usableFromInline + init(value: T) { + self.value = value + } +} + +@available(macOS, unavailable) +@_alwaysEmitIntoClient public func aeicFunction() { + // Select the unavailable @usableFromInline init over the synthesized internal + // memberwise initializer. + _ = Box(value: 42) +}