Files
swift-mirror/test/Availability/availability_stored_unavailable.swift
Allan Shortlidge 897a74f495 Tests: Move some availability tests into a new test/Availability directory.
Un-reverts 9c01ee2c1b.

Also, add myself as a reviewer for more availability related files.

NFC.
2025-06-23 15:57:34 -07:00

94 lines
3.4 KiB
Swift

// RUN: %target-typecheck-verify-swift -parse-as-library
// REQUIRES: OS=macosx
@available(macOS, unavailable)
struct UnavailableMacOSStruct {} // expected-note 2 {{'UnavailableMacOSStruct' has been explicitly marked unavailable here}}
@available(iOS, introduced: 8.0)
@_spi_available(macOS, introduced: 10.9)
public struct SPIAvailableMacOSStruct {}
@available(*, unavailable)
public struct UniversallyUnavailableStruct {} // expected-note {{'UniversallyUnavailableStruct' has been explicitly marked unavailable here}}
// Ok, initialization of globals is lazy and boxed.
@available(macOS, unavailable)
var unavailableMacOSGlobal: UnavailableMacOSStruct = .init()
@available(iOS, introduced: 8.0)
@_spi_available(macOS, introduced: 10.9)
var spiAvailableMacOSGlobal: SPIAvailableMacOSStruct = .init()
@available(*, unavailable)
var universallyUnavailableGlobal: UniversallyUnavailableStruct = .init()
struct GoodAvailableStruct {
// Ok, computed property.
@available(macOS, unavailable)
var unavailableMacOS: UnavailableMacOSStruct {
get { UnavailableMacOSStruct() }
}
// Ok, storage is available to implementation at runtime.
@_spi_available(macOS, introduced: 10.9)
var spiAvailableMacOS: SPIAvailableMacOSStruct
// Ok, initialization of static vars is lazy and boxed.
@available(macOS, unavailable)
static var staticUnavailableMacOS: UnavailableMacOSStruct = .init()
}
@available(macOS, unavailable)
struct GoodUnavailableMacOSStruct {
var unavailableMacOS: UnavailableMacOSStruct = .init()
lazy var lazyUnavailableMacOS: UnavailableMacOSStruct = .init()
// Ok, the container is unavailable.
@available(macOS, unavailable)
var unavailableMacOSExplicit: UnavailableMacOSStruct = .init()
}
@available(macOS, unavailable)
struct GoodNestedUnavailableMacOSStruct {
struct Inner {
var unavailableMacOS: UnavailableMacOSStruct = .init()
lazy var lazyUnavailableMacOS: UnavailableMacOSStruct = .init()
// Ok, the container is unavailable.
@available(macOS, unavailable)
var unavailableMacOSExplicit: UnavailableMacOSStruct = .init()
}
}
@available(*, unavailable)
struct GoodUniversallyUnavailableStruct {
var universallyUnavailable: UniversallyUnavailableStruct = .init()
lazy var lazyUniversallyUnavailable: UniversallyUnavailableStruct = .init()
@available(*, unavailable)
var universallyUnavailableExplicit: UniversallyUnavailableStruct = .init()
}
struct BadStruct {
// expected-error@+1 {{stored properties cannot be marked unavailable with '@available'}}
@available(macOS, unavailable)
var unavailableMacOS: UnavailableMacOSStruct = .init() // expected-error {{'UnavailableMacOSStruct' is unavailable in macOS}}
// expected-error@+1 {{stored properties cannot be marked unavailable with '@available'}}
@available(macOS, unavailable)
lazy var lazyUnavailableMacOS: UnavailableMacOSStruct = .init() // expected-error {{'UnavailableMacOSStruct' is unavailable in macOS}}
// expected-error@+1 {{stored properties cannot be marked unavailable with '@available'}}
@available(*, unavailable)
var universallyUnavailable: UniversallyUnavailableStruct = .init() // expected-error {{'UniversallyUnavailableStruct' is unavailable}}
}
enum GoodAvailableEnum {
@available(macOS, unavailable)
case unavailableMacOS(UnavailableMacOSStruct)
@_spi_available(macOS, introduced: 10.9)
case spiAvailableMacOS(SPIAvailableMacOSStruct)
}