// RUN: %target-swift-frontend -sdk %S/Inputs -I %S/Inputs -enable-source-import %s -emit-silgen | FileCheck %s // REQUIRES: objc_interop import gizmo // Although we don't ever expose initializers and methods of generic classes // to ObjC yet, a generic subclass of an ObjC class must still use ObjC // deallocation. // CHECK-NOT: sil hidden @_TFCSo7Genericd // CHECK-NOT: sil hidden @_TFCSo8NSObjectd class Generic: NSObject { var x: Int = 10 // CHECK-LABEL: sil hidden @_TFC18objc_generic_class7GenericD : $@convention(method) (@owned Generic) -> () { // CHECK-NEXT: bb0({{%.*}} : $Generic): // CHECK-LABEL: sil hidden @_TToFC18objc_generic_class7GenericD : $@convention(objc_method) (Generic) -> () { // CHECK-NEXT: bb0([[SELF:%.*]] : $Generic): // CHECK: [[NATIVE:%.*]] = function_ref @_TFC18objc_generic_class7GenericD // CHECK: apply [[NATIVE]]([[SELF]]) deinit { // Don't blow up when 'self' is referenced inside an @objc deinit method // of a generic class. self.x = 0 } } // CHECK-NOT: sil hidden @_TFC18objc_generic_class7Genericd // CHECK-NOT: sil hidden @_TFCSo8NSObjectd // CHECK-LABEL: sil hidden @_TFC18objc_generic_class11SubGeneric1D : $@convention(method) (@owned SubGeneric1) -> () { // CHECK-NEXT: bb0([[SELF:%.*]] : $SubGeneric1): // CHECK: [[SUPER_DEALLOC:%.*]] = super_method [[SELF]] : $SubGeneric1, #Generic.deinit!deallocator.foreign : Generic -> () , $@convention(objc_method) <τ_0_0> (Generic<τ_0_0>) -> () // CHECK: [[SUPER:%.*]] = upcast [[SELF:%.*]] : $SubGeneric1 to $Generic // CHECK: apply [[SUPER_DEALLOC]]([[SUPER]]) class SubGeneric1: Generic { }