Revision ac4b68fbf45853ba4b9e327cb42f93f42a8fa252 authored by Ellie Shin on 17 March 2023, 04:14:20 UTC, committed by Ellie Shin on 17 March 2023, 04:14:20 UTC
1 parent f2c68fb
spi_members.swift
// RUN: %target-typecheck-verify-swift
@propertyWrapper
public struct Wrapper<T> {
public init(wrappedValue: T) {}
public var wrappedValue: T { fatalError() }
}
@_spi(Foo)
public class Bar {
// expected-note@-1 16{{type declared here}}
public init() {}
}
public struct ResilientStructSPIMembers {
public init() {}
@_spi(Foo) public func method(_: Bar) {}
@_spi(Foo) public var computedProperty: Bar { Bar() }
@_spi(Foo) public var storedProperty1: Bar
@_spi(Foo) public var storedProperty2 = Bar()
@_spi(Foo) public lazy var lazyProperty1 = Bar()
@_spi(Foo) public lazy var lazyProperty2: Bar = Bar()
@_spi(Foo) @Wrapper public var wrappedProperty1: Bar
@_spi(Foo) @Wrapper public var wrappedProperty2 = Bar()
}
@frozen public struct FrozenStructSPIMembers {
public init() {}
@_spi(Foo) public func method(_: Bar) {}
@_spi(Foo) public var computedProperty: Bar { Bar() }
@_spi(Foo) public var storedProperty1: Bar
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
// expected-error@-2 {{stored property 'storedProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
@_spi(Foo) public var storedProperty2 = Bar()
// expected-error@-1 {{stored property 'storedProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
@_spi(Foo) public lazy var lazyProperty1 = Bar()
// expected-error@-1 {{stored property 'lazyProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
@_spi(Foo) public lazy var lazyProperty2: Bar = Bar()
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
// expected-error@-2 {{stored property 'lazyProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
@_spi(Foo) @Wrapper public var wrappedProperty1: Bar
// expected-error@-1 {{stored property 'wrappedProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
@_spi(Foo) @Wrapper public var wrappedProperty2 = Bar()
// expected-error@-1 {{stored property 'wrappedProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
}
@frozen public struct FrozenStructPublicMembers {
public init() {}
public func method(_: Bar) {} // expected-error {{cannot use class 'Bar' here; it is SPI}}
public var storedProperty1: Bar
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
public var storedProperty2 = Bar()
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
// expected-error@-2 {{class 'Bar' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
// expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
public var computedProperty: Bar { Bar() } // expected-error {{cannot use class 'Bar' here; it is SPI}}
public lazy var lazyProperty1 = Bar() // expected-error {{cannot use class 'Bar' here; it is SPI}}
public lazy var lazyProperty2: Bar = Bar() // expected-error {{cannot use class 'Bar' here; it is SPI}}
@Wrapper public var wrappedProperty1: Bar
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
@Wrapper public var wrappedProperty2 = Bar()
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
// expected-error@-2 {{class 'Bar' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
// expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
}
@frozen public struct FrozenStructPrivateMembers {
private init() {}
private func method(_: Bar) {}
private var storedProperty1: Bar
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
private var storedProperty2 = Bar()
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
// expected-error@-2 {{class 'Bar' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
// expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
private var computedProperty: Bar { Bar() }
private lazy var lazyProperty1 = Bar() // expected-error {{cannot use class 'Bar' here; it is SPI}}
private lazy var lazyProperty2: Bar = Bar() // expected-error {{cannot use class 'Bar' here; it is SPI}}
@Wrapper private var wrappedProperty1: Bar
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
@Wrapper private var wrappedProperty2 = Bar()
// expected-error@-1 {{cannot use class 'Bar' here; it is SPI}}
// expected-error@-2 {{class 'Bar' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
// expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
}
public enum ResilientEnum {
@_spi(S)
case okSpiCase
@_spi(S)
case okSpiCaseWithPayload(_: Int)
}
@frozen
public enum FrozenEnum {
case okCase
@_spi(S) // expected-error {{enum case 'spiCase' cannot be declared '@_spi' in a '@frozen' enum}}
case spiCase
case okCaseWithPayload(_: Int)
@_spi(S) // expected-error {{enum case 'spiCaseWithPayload' cannot be declared '@_spi' in a '@frozen' enum}}
case spiCaseWithPayload(_: Int)
}
Computing file changes ...