Files
swift-mirror/test/ModuleInterface/actor_availability.swift
Allan Shortlidge 11abffb2f4 AST: Adopt new AvailableAttr constructor in attribute inference.
It was difficult to preserve the existing, buggy behavior of availability
attribute inference with respect to attributes specifying availability for
non-platform-specific domains. Instead, this change improves attribute merging
by tracking every domain independently, and only merging attributes from the
same domain.
2025-01-10 18:43:12 -08:00

163 lines
8.1 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-swift-emit-module-interfaces(%t/Library.swiftinterface, %t/Library.private.swiftinterface) %s -module-name Library -target %target-swift-5.3-abi-triple
// RUN: %target-swift-typecheck-module-from-interface(%t/Library.swiftinterface) -module-name Library
// RUN: %target-swift-typecheck-module-from-interface(%t/Library.private.swiftinterface) -module-name Library
// RUN: %FileCheck %s --check-prefixes=CHECK,CHECK-PUBLIC < %t/Library.swiftinterface
// RUN: %FileCheck %s --check-prefixes=CHECK,CHECK-PRIVATE < %t/Library.private.swiftinterface
// REQUIRES: VENDOR=apple
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: public actor ActorWithImplicitAvailability {
public actor ActorWithImplicitAvailability {
// CHECK: @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
// CHECK-NEXT: get
// CHECK-NEXT: }
}
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @available(macOS 10.15.4, iOS 13.4, watchOS 6.2, tvOS 13.4, *)
// CHECK-NEXT: public actor ActorWithExplicitAvailability {
@available(SwiftStdlib 5.2, *)
public actor ActorWithExplicitAvailability {
// CHECK: @available(iOS 13.4, tvOS 13.4, watchOS 6.2, macOS 10.15.4, *)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
// CHECK-NEXT: get
// CHECK-NEXT: }
}
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers @available(macOS, unavailable)
// CHECK-NEXT: public actor UnavailableActor {
@available(macOS, unavailable)
public actor UnavailableActor {
// CHECK: @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
// CHECK-NEXT: @available(macOS, unavailable, introduced: 10.15)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
// CHECK-NEXT: get
// CHECK-NEXT: }
}
// CHECK: @_hasMissingDesignatedInitializers @available(*, deprecated, message: "Will be unavailable Swift 6")
// CHECK-NEXT: @available(swift, obsoleted: 6)
// CHECK-NEXT: public actor DeprecatedAndObsoleteInSwift6Actor {
@available(*, deprecated, message: "Will be unavailable Swift 6")
@available(swift, obsoleted: 6)
public actor DeprecatedAndObsoleteInSwift6Actor {
// CHECK: @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
// CHECK-NEXT: @available(*, deprecated, message: "Will be unavailable Swift 6")
// CHECK-NEXT: @available(swift, obsoleted: 6)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
// CHECK-NEXT: get
// CHECK-NEXT: }
}
// CHECK: @available(macOS 10.15.4, iOS 13.4, watchOS 6.2, tvOS 13.4, *)
// CHECK-NEXT: public enum Enum {
@available(SwiftStdlib 5.2, *)
public enum Enum {
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers public actor NestedActor {
public actor NestedActor {
// CHECK: @available(iOS 13.4, tvOS 13.4, watchOS 6.2, macOS 10.15.4, *)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
// CHECK-NEXT: get
// CHECK-NEXT: }
}
}
// CHECK: extension Library.Enum {
extension Enum {
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers public actor ExtensionNestedActor {
public actor ExtensionNestedActor {
// CHECK: @available(iOS 13.4, tvOS 13.4, watchOS 6.2, macOS 10.15.4, *)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
// CHECK-NEXT: get
// CHECK-NEXT: }
}
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers @available(macOS, unavailable)
// CHECK-NEXT: public actor UnavailableExtensionNestedActor {
@available(macOS, unavailable)
public actor UnavailableExtensionNestedActor {
// CHECK: @available(iOS 13.4, tvOS 13.4, watchOS 6.2, *)
// CHECK-NEXT: @available(macOS, unavailable, introduced: 10.15.4)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
// CHECK-NEXT: get
// CHECK-NEXT: }
}
}
// CHECK-PUBLIC: @available(macOS, unavailable)
// CHECK-PUBLIC-NEXT: @available(iOS, unavailable)
// CHECK-PUBLIC-NEXT: @available(watchOS, unavailable)
// CHECK-PUBLIC-NEXT: @available(tvOS, unavailable
// CHECK-PUBLIC-NEXT: public struct SPIAvailableStruct
// CHECK-PRIVATE: @_spi_available(macOS, introduced: 10.15.4)
// CHECK-PRIVATE-NEXT: @_spi_available(iOS, introduced: 13.4)
// CHECK-PRIVATE-NEXT: @_spi_available(watchOS, introduced: 6.2)
// CHECK-PRIVATE-NEXT: @_spi_available(tvOS, introduced: 13.4)
// CHECK-PRIVATE-NEXT: public struct SPIAvailableStruct
@_spi_available(SwiftStdlib 5.2, *)
public struct SPIAvailableStruct {
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers @available(macOS, unavailable)
// CHECK-NEXT: public actor UnavailableNestedActor
@available(macOS, unavailable)
public actor UnavailableNestedActor {
// CHECK-PUBLIC: @available(iOS, unavailable)
// CHECK-PUBLIC-NEXT: @available(tvOS, unavailable)
// CHECK-PUBLIC-NEXT: @available(watchOS, unavailable)
// CHECK-PUBLIC-NEXT: @available(macOS, unavailable)
// CHECK-PUBLIC-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor
// CHECK-PRIVATE: @_spi_available(iOS, introduced: 13.4)
// CHECK-PRIVATE-NEXT: @_spi_available(tvOS, introduced: 13.4)
// CHECK-PRIVATE-NEXT: @_spi_available(watchOS, introduced: 6.2)
// CHECK-PRIVATE-NEXT: @_spi_available(macOS, unavailable, introduced: 10.15.4)
// CHECK-PRIVATE-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor
}
}
// CHECK: @_hasMissingDesignatedInitializers @available(macCatalyst 13.1, *)
// CHECK-NEXT: public class MacCatalystAvailableClass
@available(macCatalyst 13.1, *)
public class MacCatalystAvailableClass {
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers public actor NestedActor
public actor NestedActor {
// CHECK: @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, macCatalyst 13.1, *)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor
}
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers @available(macCatalyst 14, *)
// CHECK-NEXT: public actor LessAvailableMacCatalystActor
@available(macCatalyst 14, *)
public actor LessAvailableMacCatalystActor {
// CHECK: @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, macCatalyst 14, *)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor
}
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers @available(iOS 15.0, macOS 12.0, *)
// CHECK-NEXT: public actor AvailableiOSAndMacOSNestedActor {
@available(iOS 15.0, macOS 12.0, *)
public actor AvailableiOSAndMacOSNestedActor {
// CHECK: @available(iOS 15.0, tvOS 13.0, watchOS 6.0, macOS 12.0, *)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor
}
// CHECK-NOT: #if compiler(>=5.3) && $Actors
// CHECK: @_hasMissingDesignatedInitializers @available(iOS, unavailable)
// CHECK-NEXT: public actor UnavailableiOSNestedActor
@available(iOS, unavailable)
public actor UnavailableiOSNestedActor {
// CHECK: @available(tvOS 13.0, watchOS 6.0, macOS 10.15, *)
// CHECK-NEXT: @available(iOS, unavailable, introduced: 13.0)
// CHECK-NEXT: @_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor
}
}