@@ -8,106 +8,157 @@ public struct Wrapper<T> {
88}
99
1010@_spi ( Foo)
11- public class Bar {
11+ @propertyWrapper
12+ public struct SPIWrapper < T> {
13+ // expected-note@-1 2 {{generic struct declared here}}
14+ public init ( wrappedValue: T ) { }
15+
16+ public var wrappedValue : T { fatalError ( ) }
17+ // expected-note@-1 2 {{property declared here}}
18+ }
19+
20+ @_spi ( Foo)
21+ public class SPIType {
1222 // expected-note@-1 16{{class declared here}}
1323
1424 public init ( ) { }
1525}
1626
17- public struct ResilientStructSPIMembers {
27+ public struct PublicType {
1828 public init ( ) { }
1929
20- @_spi ( Foo) public func method ( _ : Bar ) { }
21- @ _spi ( Foo ) public var computedProperty : Bar { Bar ( ) }
30+ @_spi ( Foo) public func spiFunc ( ) { }
31+ }
2232
23- @_spi ( Foo) public var storedProperty1 : Bar
24- @_spi ( Foo) public var storedProperty2 = Bar ( )
25- @_spi ( Foo) public lazy var lazyProperty1 = Bar ( )
26- @_spi ( Foo) public lazy var lazyProperty2 : Bar = Bar ( )
27- @_spi ( Foo) @Wrapper public var wrappedProperty1 : Bar
28- @_spi ( Foo) @Wrapper public var wrappedProperty2 = Bar ( )
33+ public struct ResilientStructSPIMembers {
34+ public init ( ) { }
35+
36+ @_spi ( Foo) public func method( _: SPIType ) { }
37+ @_spi ( Foo) public var computedProperty : SPIType { SPIType ( ) }
38+
39+ @_spi ( Foo) public var storedProperty1 : SPIType
40+ @_spi ( Foo) public var storedProperty2 = SPIType ( )
41+ @_spi ( Foo) public lazy var lazyProperty1 = SPIType ( )
42+ @_spi ( Foo) public lazy var lazyProperty2 : SPIType = SPIType ( )
43+ @_spi ( Foo) @Wrapper public var wrappedProperty1 : SPIType
44+ @_spi ( Foo) @Wrapper public var wrappedProperty2 = SPIType ( )
45+ @_spi ( Foo) @SPIWrapper public var wrappedProperty3 = SPIType ( )
46+
47+ @SPIWrapper public var wrappedProperty4 : PublicType
48+ // expected-error@-1 {{cannot use generic struct 'SPIWrapper' as property wrapper here; it is SPI}}
49+ // expected-error@-2 {{cannot use property 'wrappedValue' here; it is SPI}}
50+
51+ @_spi ( Foo) public var inlinableGet : Int {
52+ @inlinable
53+ get {
54+ let _ = SPIType ( )
55+ let t = PublicType ( )
56+ t. spiFunc ( )
57+ return 42
58+ }
59+ }
60+
61+ public var inlinablePublicGet : Int {
62+ @inlinable
63+ get {
64+ let _ = SPIType ( )
65+ // expected-error@-1 {{class 'SPIType' cannot be used in an '@inlinable' function because it is SPI}}
66+ // expected-error@-2 {{initializer 'init()' cannot be used in an '@inlinable' function because it is SPI}}
67+ let t = PublicType ( )
68+ t. spiFunc ( )
69+ // expected-error@-1 {{instance method 'spiFunc()' cannot be used in an '@inlinable' function because it is SPI}}
70+ return 42
71+ }
72+ }
2973}
3074
3175@frozen public struct FrozenStructSPIMembers {
3276 public init ( ) { }
3377
34- @_spi ( Foo) public func method( _: Bar ) { }
35- @_spi ( Foo) public var computedProperty : Bar { Bar ( ) }
78+ @_spi ( Foo) public func method( _: SPIType ) { }
79+ @_spi ( Foo) public var computedProperty : SPIType { SPIType ( ) }
3680
37- @_spi ( Foo) public var storedProperty1 : Bar
38- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
81+ @_spi ( Foo) public var storedProperty1 : SPIType
82+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
3983 // expected-error@-2 {{stored property 'storedProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
4084
41- @_spi ( Foo) public var storedProperty2 = Bar ( )
85+ @_spi ( Foo) public var storedProperty2 = SPIType ( )
4286 // expected-error@-1 {{stored property 'storedProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
4387
44- @_spi ( Foo) public lazy var lazyProperty1 = Bar ( )
88+ @_spi ( Foo) public lazy var lazyProperty1 = SPIType ( )
4589 // expected-error@-1 {{stored property 'lazyProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
4690
47- @_spi ( Foo) public lazy var lazyProperty2 : Bar = Bar ( )
48- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
91+ @_spi ( Foo) public lazy var lazyProperty2 : SPIType = SPIType ( )
92+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
4993 // expected-error@-2 {{stored property 'lazyProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
5094
51- @_spi ( Foo) @Wrapper public var wrappedProperty1 : Bar
95+ @_spi ( Foo) @Wrapper public var wrappedProperty1 : SPIType
5296 // expected-error@-1 {{stored property 'wrappedProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
5397
54- @_spi ( Foo) @Wrapper public var wrappedProperty2 = Bar ( )
98+ @_spi ( Foo) @Wrapper public var wrappedProperty2 = SPIType ( )
5599 // expected-error@-1 {{stored property 'wrappedProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
100+
101+ @_spi ( Foo) @SPIWrapper public var wrappedProperty3 = SPIType ( )
102+ // expected-error@-1 {{stored property 'wrappedProperty3' cannot be declared '@_spi' in a '@frozen' struct}}
56103}
57104
58105@frozen public struct FrozenStructPublicMembers {
59106 public init ( ) { }
60107
61- public func method( _: Bar ) { } // expected-error {{cannot use class 'Bar ' here; it is SPI}}
108+ public func method( _: SPIType ) { } // expected-error {{cannot use class 'SPIType ' here; it is SPI}}
62109
63- public var storedProperty1 : Bar
64- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
110+ public var storedProperty1 : SPIType
111+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
65112
66- public var storedProperty2 = Bar ( )
67- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
68- // expected-error@-2 {{class 'Bar ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
113+ public var storedProperty2 = SPIType ( )
114+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
115+ // expected-error@-2 {{class 'SPIType ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
69116 // expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
70117
71- public var computedProperty : Bar { Bar ( ) } // expected-error {{cannot use class 'Bar ' here; it is SPI}}
118+ public var computedProperty : SPIType { SPIType ( ) } // expected-error {{cannot use class 'SPIType ' here; it is SPI}}
72119
73- public lazy var lazyProperty1 = Bar ( ) // expected-error {{cannot use class 'Bar ' here; it is SPI}}
120+ public lazy var lazyProperty1 = SPIType ( ) // expected-error {{cannot use class 'SPIType ' here; it is SPI}}
74121
75- public lazy var lazyProperty2 : Bar = Bar ( ) // expected-error {{cannot use class 'Bar ' here; it is SPI}}
122+ public lazy var lazyProperty2 : SPIType = SPIType ( ) // expected-error {{cannot use class 'SPIType ' here; it is SPI}}
76123
77- @Wrapper public var wrappedProperty1 : Bar
78- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
124+ @Wrapper public var wrappedProperty1 : SPIType
125+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
79126
80- @Wrapper public var wrappedProperty2 = Bar ( )
81- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
82- // expected-error@-2 {{class 'Bar ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
127+ @Wrapper public var wrappedProperty2 = SPIType ( )
128+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
129+ // expected-error@-2 {{class 'SPIType ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
83130 // expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
131+
132+ @SPIWrapper public var wrappedProperty3 : PublicType
133+ // expected-error@-1 {{cannot use generic struct 'SPIWrapper' as property wrapper here; it is SPI}}
134+ // expected-error@-2 {{cannot use property 'wrappedValue' here; it is SPI}}
84135}
85136
86137@frozen public struct FrozenStructPrivateMembers {
87138 private init ( ) { }
88139
89- private func method( _: Bar ) { }
140+ private func method( _: SPIType ) { }
90141
91- private var storedProperty1 : Bar
92- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
142+ private var storedProperty1 : SPIType
143+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
93144
94- private var storedProperty2 = Bar ( )
95- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
96- // expected-error@-2 {{class 'Bar ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
145+ private var storedProperty2 = SPIType ( )
146+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
147+ // expected-error@-2 {{class 'SPIType ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
97148 // expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
98149
99- private var computedProperty : Bar { Bar ( ) }
150+ private var computedProperty : SPIType { SPIType ( ) }
100151
101- private lazy var lazyProperty1 = Bar ( ) // expected-error {{cannot use class 'Bar ' here; it is SPI}}
152+ private lazy var lazyProperty1 = SPIType ( ) // expected-error {{cannot use class 'SPIType ' here; it is SPI}}
102153
103- private lazy var lazyProperty2 : Bar = Bar ( ) // expected-error {{cannot use class 'Bar ' here; it is SPI}}
154+ private lazy var lazyProperty2 : SPIType = SPIType ( ) // expected-error {{cannot use class 'SPIType ' here; it is SPI}}
104155
105- @Wrapper private var wrappedProperty1 : Bar
106- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
156+ @Wrapper private var wrappedProperty1 : SPIType
157+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
107158
108- @Wrapper private var wrappedProperty2 = Bar ( )
109- // expected-error@-1 {{cannot use class 'Bar ' here; it is SPI}}
110- // expected-error@-2 {{class 'Bar ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
159+ @Wrapper private var wrappedProperty2 = SPIType ( )
160+ // expected-error@-1 {{cannot use class 'SPIType ' here; it is SPI}}
161+ // expected-error@-2 {{class 'SPIType ' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
111162 // expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
112163}
113164
0 commit comments