@@ -190,3 +190,103 @@ func testMultiPayloadBlock() {
190
190
}
191
191
192
192
testMultiPayloadBlock ( )
193
+
194
+ class GenericOuterClassNSObject < T: NSObject > {
195
+ enum InnerEnum {
196
+ case x( T . Type )
197
+ case y( T )
198
+ }
199
+ }
200
+
201
+ func testNestedGenericEnumNSObject( ) {
202
+ let ptr = UnsafeMutablePointer< GenericOuterClassNSObject < ObjCPrintOnDealloc > . InnerEnum> . allocate( capacity: 1 )
203
+
204
+ // initWithCopy
205
+ do {
206
+ let x = GenericOuterClassNSObject< ObjCPrintOnDealloc> . InnerEnum. y ( ObjCPrintOnDealloc ( ) )
207
+ testInit ( ptr, to: x)
208
+ }
209
+
210
+ // assignWithTake
211
+ do {
212
+ let y = GenericOuterClassNSObject< ObjCPrintOnDealloc> . InnerEnum. y ( ObjCPrintOnDealloc ( ) )
213
+
214
+ // CHECK-NEXT: Before deinit
215
+ print ( " Before deinit " )
216
+
217
+ // CHECK-NEXT: ObjCPrintOnDealloc deinitialized!
218
+ testAssign ( ptr, from: y)
219
+ }
220
+
221
+ // assignWithCopy
222
+ do {
223
+ var z = GenericOuterClassNSObject< ObjCPrintOnDealloc> . InnerEnum. y ( ObjCPrintOnDealloc ( ) )
224
+
225
+ // CHECK-NEXT: Before deinit
226
+ print ( " Before deinit " )
227
+
228
+ // CHECK-NEXT: ObjCPrintOnDealloc deinitialized!
229
+ testAssignCopy ( ptr, from: & z)
230
+ }
231
+
232
+ // CHECK-NEXT: Before deinit
233
+ print ( " Before deinit " )
234
+
235
+ // destroy
236
+ // CHECK-NEXT: ObjCPrintOnDealloc deinitialized!
237
+ testDestroy ( ptr)
238
+
239
+ ptr. deallocate ( )
240
+ }
241
+
242
+ testNestedGenericEnumNSObject ( )
243
+
244
+ class GenericOuterClassSwiftObjC < T: SwiftObjC > {
245
+ enum InnerEnum {
246
+ case x( T . Type )
247
+ case y( T )
248
+ }
249
+ }
250
+
251
+ func testNestedGenericEnumSwiftObjC( ) {
252
+ let ptr = UnsafeMutablePointer< GenericOuterClassSwiftObjC < SwiftObjC > . InnerEnum> . allocate( capacity: 1 )
253
+
254
+ // initWithCopy
255
+ do {
256
+ let x = GenericOuterClassSwiftObjC< SwiftObjC> . InnerEnum. y ( SwiftObjC ( ) )
257
+ testInit ( ptr, to: x)
258
+ }
259
+
260
+ // assignWithTake
261
+ do {
262
+ let y = GenericOuterClassSwiftObjC< SwiftObjC> . InnerEnum. y ( SwiftObjC ( ) )
263
+
264
+ // CHECK-NEXT: Before deinit
265
+ print ( " Before deinit " )
266
+
267
+ // CHECK-NEXT: SwiftObjC deinitialized!
268
+ testAssign ( ptr, from: y)
269
+ }
270
+
271
+ // assignWithCopy
272
+ do {
273
+ var z = GenericOuterClassSwiftObjC< SwiftObjC> . InnerEnum. y ( SwiftObjC ( ) )
274
+
275
+ // CHECK-NEXT: Before deinit
276
+ print ( " Before deinit " )
277
+
278
+ // CHECK-NEXT: SwiftObjC deinitialized!
279
+ testAssignCopy ( ptr, from: & z)
280
+ }
281
+
282
+ // CHECK-NEXT: Before deinit
283
+ print ( " Before deinit " )
284
+
285
+ // destroy
286
+ // CHECK-NEXT: SwiftObjC deinitialized!
287
+ testDestroy ( ptr)
288
+
289
+ ptr. deallocate ( )
290
+ }
291
+
292
+ testNestedGenericEnumSwiftObjC ( )
0 commit comments