From 3786a8ceb9169bd79e19323dcea66e46f040bdd8 Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Thu, 28 Jul 2022 16:00:55 -0700 Subject: [PATCH] sema: consider decl context with @_spi_available as an SPI export context This allows chained invocations of multiple @_spi_available decls. rdar://97748740 --- lib/Sema/TypeCheckAvailability.cpp | 3 ++- test/Sema/spi-available-context.swift | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 test/Sema/spi-available-context.swift diff --git a/lib/Sema/TypeCheckAvailability.cpp b/lib/Sema/TypeCheckAvailability.cpp index 8f0786a3e7ef1..df7dcb9b09509 100644 --- a/lib/Sema/TypeCheckAvailability.cpp +++ b/lib/Sema/TypeCheckAvailability.cpp @@ -180,7 +180,8 @@ static void forEachOuterDecl(DeclContext *DC, Fn fn) { static void computeExportContextBits(ASTContext &Ctx, Decl *D, bool *spi, bool *implicit, bool *deprecated, Optional *unavailablePlatformKind) { - if (D->isSPI()) + if (D->isSPI() || + D->isAvailableAsSPI()) *spi = true; // Defer bodies are desugared to an implicit closure expression. We need to diff --git a/test/Sema/spi-available-context.swift b/test/Sema/spi-available-context.swift new file mode 100644 index 0000000000000..85750d35b0085 --- /dev/null +++ b/test/Sema/spi-available-context.swift @@ -0,0 +1,11 @@ +// REQUIRES: VENDOR=apple +// REQUIRES: OS=macosx +// RUN: %target-typecheck-verify-swift -target %target-cpu-apple-macosx11.9 -library-level api + +@_spi_available(macOS 10.4, *) +public protocol Foo { } + +@_spi_available(macOS 10.4, *) +public class Bar { + public var foo: Foo? +}