// RUN: %target-swift-emit-silgen -primary-file %s | %FileCheck %s public protocol Ungulate {} public protocol Domesticated {} public class Horse { // CHECK-LABEL: sil [serialized] [exact_self_class] [ossa] @$s45designated_init_inheritance_with_where_clause5HorseCACyxGycfC : $@convention(method) (@thick Horse.Type) -> @owned Horse { // CHECK-LABEL: sil [ossa] @$s45designated_init_inheritance_with_where_clause5HorseCACyxGycfc : $@convention(method) (@owned Horse) -> @owned Horse { public init() { } // CHECK-LABEL: sil [serialized] [exact_self_class] [ossa] @$s45designated_init_inheritance_with_where_clause5HorseCACyxGycAA12DomesticatedRzrlufC : $@convention(method) (@thick Horse.Type) -> @owned Horse { // CHECK-LABEL: sil [ossa] @$s45designated_init_inheritance_with_where_clause5HorseCACyxGycAA12DomesticatedRzrlufc : $@convention(method) (@owned Horse) -> @owned Horse { public init() where U: Domesticated { } } public class Pony : Horse { // CHECK-LABEL: sil [serialized] [exact_self_class] [ossa] @$s45designated_init_inheritance_with_where_clause4PonyCACyxGycfC : $@convention(method) (@thick Pony.Type) -> @owned Pony { // CHECK-LABEL: sil [ossa] @$s45designated_init_inheritance_with_where_clause4PonyCACyxGycfc : $@convention(method) (@owned Pony) -> @owned Pony { // CHECK-LABEL: sil [serialized] [exact_self_class] [ossa] @$s45designated_init_inheritance_with_where_clause4PonyCACyxGycAA12DomesticatedRzrlufC : $@convention(method) (@thick Pony.Type) -> @owned Pony { // CHECK-LABEL: sil [ossa] @$s45designated_init_inheritance_with_where_clause4PonyCACyxGycAA12DomesticatedRzrlufc : $@convention(method) (@owned Pony) -> @owned Pony { } public class Barn { init(_: T) where T : AnyObject {} init(_: T, _: U) where T : Domesticated, U : Ungulate {} } public class BigBarn : Barn { // CHECK-LABEL: sil hidden [ossa] @$s45designated_init_inheritance_with_where_clause7BigBarnCyACyXlcfc : $@convention(method) (@owned AnyObject, @owned BigBarn) -> @owned BigBarn { } public struct Cat : Domesticated {} public struct Sheep : Ungulate {} public class SmallBarn : Barn { // CHECK-LABEL: sil hidden [ossa] @$s45designated_init_inheritance_with_where_clause9SmallBarnCyAcA3CatV_xtcAA8UngulateRzlufc : $@convention(method) (Cat, @in U, @owned SmallBarn) -> @owned SmallBarn { // CHECK-LABEL: sil private [thunk] [ossa] @$s45designated_init_inheritance_with_where_clause9SmallBarnCyAcA3CatV_xtcAA8UngulateRzlufCAA0H0CyAHyxGx_qd__tcAA12DomesticatedRzAaFRd__lufCTV : $@convention(method) <τ_0_0 where τ_0_0 : Ungulate> (@in Cat, @in τ_0_0, @thick SmallBarn.Type) -> @owned SmallBarn { } // CHECK-LABEL: sil_vtable [serialized] BigBarn { // CHECK-NEXT: #Barn.init!allocator: (Barn.Type) -> (T) -> Barn : @$s45designated_init_inheritance_with_where_clause7BigBarnCyACyXlcfC [override] // BigBarn.__allocating_init(_:) // CHECK-NEXT: #Barn.init!allocator: (Barn.Type) -> (T, U) -> Barn : @$s45designated_init_inheritance_with_where_clause4BarnCyACyxGx_qd__tcAA12DomesticatedRzAA8UngulateRd__lufC [inherited] // Barn.__allocating_init(_:_:) // CHECK-NEXT: #BigBarn.deinit!deallocator: @$s45designated_init_inheritance_with_where_clause7BigBarnCfD // BigBarn.__deallocating_deinit // CHECK-NEXT: } // CHECK-LABEL: sil_vtable [serialized] SmallBarn { // CHECK-NEXT: #Barn.init!allocator: (Barn.Type) -> (T) -> Barn : @$s45designated_init_inheritance_with_where_clause4BarnCyACyxGxcRlzClufC [inherited] // Barn.__allocating_init(_:) // CHECK-NEXT: (Barn.Type) -> (T, U) -> Barn : @$s45designated_init_inheritance_with_where_clause9SmallBarnCyAcA3CatV_xtcAA8UngulateRzlufCAA0H0CyAHyxGx_qd__tcAA12DomesticatedRzAaFRd__lufCTV [override] // vtable thunk for Barn.__allocating_init(_:_:) dispatching to SmallBarn.__allocating_init(_:_:) // CHECK-NEXT: #SmallBarn.deinit!deallocator: @$s45designated_init_inheritance_with_where_clause9SmallBarnCfD // SmallBarn.__deallocating_deinit // CHECK-NEXT: }