@@ -484,11 +484,14 @@ class ConcreteOptional: Opaque<S?> {
484484class GenericBase < T> {
485485 func doStuff< U> ( t: T , u: U ) { }
486486 init < U> ( t: T , u: U ) { }
487+
488+ func doStuff2< U> ( u: U ) where T == Int { }
487489}
488490
489491// CHECK-LABEL: sil_vtable GenericBase {
490492// CHECK-NEXT: #GenericBase.doStuff!1: <T><U> (GenericBase<T>) -> (T, U) -> () : @$s27vtable_thunks_reabstraction11GenericBaseC7doStuff1t1uyx_qd__tlF // GenericBase.doStuff<A>(t:u:)
491493// CHECK-NEXT: #GenericBase.init!allocator.1: <T><U> (GenericBase<T>.Type) -> (T, U) -> GenericBase<T> : @$s27vtable_thunks_reabstraction11GenericBaseC1t1uACyxGx_qd__tclufC
494+ // CHECK-NEXT: #GenericBase.doStuff2!1: <T where T == Int><U> (GenericBase<T>) -> (U) -> () : @$s27vtable_thunks_reabstraction11GenericBaseC8doStuff21uyqd___tSiRszlF
492495// CHECK-NEXT: #GenericBase.deinit!deallocator.1: @$s27vtable_thunks_reabstraction11GenericBaseCfD // GenericBase.__deallocating_deinit
493496// CHECK-NEXT: }
494497
@@ -504,6 +507,7 @@ class ConcreteSub : GenericBase<Int> {
504507// CHECK-LABEL: sil_vtable ConcreteSub {
505508// CHECK-NEXT: #GenericBase.doStuff!1: <T><U> (GenericBase<T>) -> (T, U) -> () : @$s27vtable_thunks_reabstraction11ConcreteSubC7doStuff1t1uySi_xtlFAA11GenericBaseCAdeFyx_qd__tlFTV [override] // vtable thunk for GenericBase.doStuff<A>(t:u:) dispatching to ConcreteSub.doStuff<A>(t:u:)
506509// CHECK-NEXT: #GenericBase.init!allocator.1: <T><U> (GenericBase<T>.Type) -> (T, U) -> GenericBase<T> : @$s27vtable_thunks_reabstraction11ConcreteSubC1t1uACSi_xtclufCAA11GenericBaseCAdeGyxGx_qd__tclufCTV [override]
510+ // CHECK-NEXT: #GenericBase.doStuff2!1: <T where T == Int><U> {{.*}}F [inherited]
507511// CHECK-NEXT: #ConcreteSub.deinit!deallocator.1: @$s27vtable_thunks_reabstraction11ConcreteSubCfD // ConcreteSub.__deallocating_deinit
508512// CHECK-NEXT: }
509513
@@ -543,6 +547,7 @@ class MoreGenericSub1<T, TT> : GenericBase<T> {
543547// CHECK-LABEL: sil_vtable MoreGenericSub1 {
544548// CHECK-NEXT: #GenericBase.doStuff!1: <T><U> (GenericBase<T>) -> (T, U) -> () : @$s27vtable_thunks_reabstraction15MoreGenericSub1C7doStuff1t1uyx_qd__tlF [override] // MoreGenericSub1.doStuff<A>(t:u:)
545549// CHECK-NEXT: #GenericBase.init!allocator.1: <T><U> (GenericBase<T>.Type) -> (T, U) -> GenericBase<T> : @$s27vtable_thunks_reabstraction15MoreGenericSub1C1t1uACyxq_Gx_qd__tclufC [override]
550+ // CHECK-NEXT: #GenericBase.doStuff2!1: <T where T == Int><U> {{.*}}F [inherited]
546551// CHECK-NEXT: #MoreGenericSub1.deinit!deallocator.1: @$s27vtable_thunks_reabstraction15MoreGenericSub1CfD // MoreGenericSub1.__deallocating_deinit
547552// CHECK-NEXT: }
548553
@@ -555,5 +560,18 @@ class MoreGenericSub2<TT, T> : GenericBase<T> {
555560// CHECK-LABEL: sil_vtable MoreGenericSub2 {
556561// CHECK-NEXT: #GenericBase.doStuff!1: <T><U> (GenericBase<T>) -> (T, U) -> () : @$s27vtable_thunks_reabstraction15MoreGenericSub2C7doStuff1t1uyq__qd__tlF [override] // MoreGenericSub2.doStuff<A>(t:u:)
557562// CHECK-NEXT: #GenericBase.init!allocator.1: <T><U> (GenericBase<T>.Type) -> (T, U) -> GenericBase<T> : @$s27vtable_thunks_reabstraction15MoreGenericSub2C1t1uACyxq_Gq__qd__tclufC [override]
563+ // CHECK-NEXT: #GenericBase.doStuff2!1: <T where T == Int><U> {{.*}}F [inherited]
558564// CHECK-NEXT: #MoreGenericSub2.deinit!deallocator.1: @$s27vtable_thunks_reabstraction15MoreGenericSub2CfD // MoreGenericSub2.__deallocating_deinit
559565// CHECK-NEXT: }
566+
567+ class GenericSub2 < T> : GenericBase < T > {
568+ override func doStuff2< U> ( u: U ) where T: FixedWidthInteger { }
569+ }
570+
571+ // CHECK-LABEL: sil_vtable GenericSub2 {
572+ // CHECK-NEXT: #GenericBase.doStuff!1: <T><U> {{.*}}F [inherited]
573+ // CHECK-NEXT: #GenericBase.init
574+ // CHECK-NEXT: #GenericBase.doStuff2!1: <T where T == Int><U> (GenericBase<T>) -> (U) -> () : @$s27vtable_thunks_reabstraction11GenericSub2C8doStuff21uyqd___ts17FixedWidthIntegerRzlFAA0D4BaseCAdEyqd___tSiRszlFTV [override]
575+ // CHECK-NEXT: #GenericSub2.doStuff2!1: <T where T : FixedWidthInteger><U> (GenericSub2<T>) -> (U) -> () : @$s27vtable_thunks_reabstraction11GenericSub2C8doStuff21uyqd___ts17FixedWidthIntegerRzlF
576+ // CHECK-NEXT: #GenericSub2.deinit
577+ // CHECK-NEXT: }
0 commit comments