@@ -8,106 +8,157 @@ public struct Wrapper<T> {
8
8
}
9
9
10
10
@_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 {
12
22
// expected-note@-1 16{{class declared here}}
13
23
14
24
public init ( ) { }
15
25
}
16
26
17
- public struct ResilientStructSPIMembers {
27
+ public struct PublicType {
18
28
public init ( ) { }
19
29
20
- @_spi ( Foo) public func method ( _ : Bar ) { }
21
- @ _spi ( Foo ) public var computedProperty : Bar { Bar ( ) }
30
+ @_spi ( Foo) public func spiFunc ( ) { }
31
+ }
22
32
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
+ }
29
73
}
30
74
31
75
@frozen public struct FrozenStructSPIMembers {
32
76
public init ( ) { }
33
77
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 ( ) }
36
80
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}}
39
83
// expected-error@-2 {{stored property 'storedProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
40
84
41
- @_spi ( Foo) public var storedProperty2 = Bar ( )
85
+ @_spi ( Foo) public var storedProperty2 = SPIType ( )
42
86
// expected-error@-1 {{stored property 'storedProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
43
87
44
- @_spi ( Foo) public lazy var lazyProperty1 = Bar ( )
88
+ @_spi ( Foo) public lazy var lazyProperty1 = SPIType ( )
45
89
// expected-error@-1 {{stored property 'lazyProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
46
90
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}}
49
93
// expected-error@-2 {{stored property 'lazyProperty2' cannot be declared '@_spi' in a '@frozen' struct}}
50
94
51
- @_spi ( Foo) @Wrapper public var wrappedProperty1 : Bar
95
+ @_spi ( Foo) @Wrapper public var wrappedProperty1 : SPIType
52
96
// expected-error@-1 {{stored property 'wrappedProperty1' cannot be declared '@_spi' in a '@frozen' struct}}
53
97
54
- @_spi ( Foo) @Wrapper public var wrappedProperty2 = Bar ( )
98
+ @_spi ( Foo) @Wrapper public var wrappedProperty2 = SPIType ( )
55
99
// 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}}
56
103
}
57
104
58
105
@frozen public struct FrozenStructPublicMembers {
59
106
public init ( ) { }
60
107
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}}
62
109
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}}
65
112
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}}
69
116
// expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
70
117
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}}
72
119
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}}
74
121
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}}
76
123
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}}
79
126
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}}
83
130
// 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}}
84
135
}
85
136
86
137
@frozen public struct FrozenStructPrivateMembers {
87
138
private init ( ) { }
88
139
89
- private func method( _: Bar ) { }
140
+ private func method( _: SPIType ) { }
90
141
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}}
93
144
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}}
97
148
// expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
98
149
99
- private var computedProperty : Bar { Bar ( ) }
150
+ private var computedProperty : SPIType { SPIType ( ) }
100
151
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}}
102
153
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}}
104
155
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}}
107
158
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}}
111
162
// expected-error@-3 {{initializer 'init()' cannot be used in a property initializer in a '@frozen' type because it is SPI}}
112
163
}
113
164
0 commit comments