Files
swift-mirror/test/Sema/property_wrapper_availability.swift
Allan Shortlidge b5066bbcaf Sema: Check the availability of property wrappers attached to VarDecls in named patterns.
The availability of property wrappers was previously checked for typed patterns but not named patterns.

Resolves rdar://86698223.
2022-08-22 16:51:27 -07:00

79 lines
3.0 KiB
Swift

// RUN: %target-typecheck-verify-swift -target %target-cpu-apple-macosx10.50
// REQUIRES: OS=macosx
struct S {}
@propertyWrapper
struct AlwaysAvailableWrapper<T> {
var wrappedValue: T
}
@available(macOS 10.51, *)
@propertyWrapper
struct Available10_51Wrapper<T> {
var wrappedValue: T
}
@available(*, unavailable)
@propertyWrapper
struct UnavailableWrapper<T> { // expected-note 6 {{'UnavailableWrapper' has been explicitly marked unavailable here}}
var wrappedValue: T
}
struct AlwaysAvailableStruct { // expected-note 2 {{add @available attribute to enclosing struct}}
@AlwaysAvailableWrapper var alwaysAvailableExplicit: S
@AlwaysAvailableWrapper var alwaysAvailableInferred = S()
@Available10_51Wrapper var available10_51Explicit: S // expected-error {{'Available10_51Wrapper' is only available in macOS 10.51 or newer}}
@Available10_51Wrapper var available10_51Inferred = S() // expected-error {{'Available10_51Wrapper' is only available in macOS 10.51 or newer}}
@UnavailableWrapper var unavailableExplicit: S // expected-error {{'UnavailableWrapper' is unavailable}}
@UnavailableWrapper var unavailableInferred = S() // expected-error {{'UnavailableWrapper' is unavailable}}
}
@available(macOS 10.51, *)
struct Available10_51Struct {
@AlwaysAvailableWrapper var alwaysAvailableExplicit: S
@AlwaysAvailableWrapper var alwaysAvailableInferred = S()
@Available10_51Wrapper var available10_51Explicit: S
@Available10_51Wrapper var available10_51Inferred = S()
@UnavailableWrapper var unavailableExplicit: S // expected-error {{'UnavailableWrapper' is unavailable}}
@UnavailableWrapper var unavailableInferred = S() // expected-error {{'UnavailableWrapper' is unavailable}}
}
@available(*, unavailable)
struct UnavailableStruct {
@AlwaysAvailableWrapper var alwaysAvailableExplicit: S
@AlwaysAvailableWrapper var alwaysAvailableInferred = S()
@Available10_51Wrapper var available10_51Explicit: S // expected-error {{'Available10_51Wrapper' is only available in macOS 10.51 or newer}}
@Available10_51Wrapper var available10_51Inferred = S() // expected-error {{'Available10_51Wrapper' is only available in macOS 10.51 or newer}}
@UnavailableWrapper var unavailableExplicit: S
@UnavailableWrapper var unavailableInferred = S()
}
func alwaysAvailableFunc( // expected-note {{add @available attribute to enclosing global function}}
@AlwaysAvailableWrapper _ alwaysAvailable: S,
@Available10_51Wrapper _ available10_51: S, // expected-error {{'Available10_51Wrapper' is only available in macOS 10.51 or newer}}
@UnavailableWrapper _ unavailable: S // expected-error {{'UnavailableWrapper' is unavailable}}
) {}
@available(macOS 10.51, *)
func available10_51Func(
@AlwaysAvailableWrapper _ alwaysAvailable: S,
@Available10_51Wrapper _ available10_51: S,
@UnavailableWrapper _ unavailable: S // expected-error {{'UnavailableWrapper' is unavailable}}
) {}
@available(*, unavailable)
func unavailableFunc(
@AlwaysAvailableWrapper _ alwaysAvailable: S,
@Available10_51Wrapper _ available10_51: S,
@UnavailableWrapper _ unavailable: S
) {}