@@ -190,3 +190,103 @@ func testMultiPayloadBlock() {
190190}
191191
192192testMultiPayloadBlock ( )
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