1- // RUN: %target-typecheck- verify-swift
1+ // RUN: %target-swift-frontend -emit-silgen %s - verify -warn-implicit-overrides | %FileCheck %s
22
33protocol Base {
4- func foo1< T : P > ( _: T , _ : T . T )
4+ func foo1< T : P > ( _: T )
55 func foo2< T : P > ( _: T , _: T . T )
6+ func foo3< T : P > ( _: T , _: T . T )
67}
78
89protocol Derived : Base {
9- func foo1< T : P > ( _: T , _: T . T )
10- func foo2< T : Q > ( _: T , _: T . T )
10+ func foo1< T : P > ( _: T )
11+ func foo2< T : P > ( _: T , _: T . T )
12+ func foo3< T : Q > ( _: T , _: T . T )
1113}
1214
1315protocol P {
@@ -17,3 +19,28 @@ protocol P {
1719protocol Q {
1820 associatedtype T
1921}
22+
23+ struct S : Derived {
24+ func foo1< T : P > ( _: T ) { }
25+ func foo2< T : P > ( _: T , _: T . T ) { }
26+ func foo3< T : P > ( _: T , _: T . T ) { }
27+ func foo3< T : Q > ( _: T , _: T . T ) { }
28+ }
29+
30+ // Make sure that Derived.foo1 and Derived.foo2 are not counted as overrides of
31+ // Base.foo1 and Base.foo2 respectively. Even though their types match, bugs
32+ // in Swift 5.6 and earlier prevented them from being overrides. We can't fix
33+ // it now because it would be an ABI break.
34+
35+ // CHECK-LABEL: sil_witness_table hidden S: Derived module override_generic {
36+ // CHECK-NEXT: base_protocol Base: S: Base module override_generic
37+ // CHECK-NEXT: method #Derived.foo1: <Self where Self : Derived><T where T : P> (Self) -> (T) -> () : @$s16override_generic1SVAA7DerivedA2aDP4foo1yyqd__AA1PRd__lFTW
38+ // CHECK-NEXT: method #Derived.foo2: <Self where Self : Derived><T where T : P> (Self) -> (T, T.T) -> () : @$s16override_generic1SVAA7DerivedA2aDP4foo2yyqd___1TQyd__tAA1PRd__lFTW
39+ // CHECK-NEXT: method #Derived.foo3: <Self where Self : Derived><T where T : Q> (Self) -> (T, T.T) -> () : @$s16override_generic1SVAA7DerivedA2aDP4foo3yyqd___1TQyd__tAA1QRd__lFTW
40+ // CHECK-NEXT: }
41+
42+ // CHECK-LABEL: sil_witness_table hidden S: Base module override_generic {
43+ // CHECK-NEXT: method #Base.foo1: <Self where Self : Base><T where T : P> (Self) -> (T) -> () : @$s16override_generic1SVAA4BaseA2aDP4foo1yyqd__AA1PRd__lFTW
44+ // CHECK-NEXT: method #Base.foo2: <Self where Self : Base><T where T : P> (Self) -> (T, T.T) -> () : @$s16override_generic1SVAA4BaseA2aDP4foo2yyqd___1TQyd__tAA1PRd__lFTW
45+ // CHECK-NEXT: method #Base.foo3: <Self where Self : Base><T where T : P> (Self) -> (T, T.T) -> () : @$s16override_generic1SVAA4BaseA2aDP4foo3yyqd___1TQyd__tAA1PRd__lFTW
46+ // CHECK-NEXT: }
0 commit comments