1
- // RUN: %target-typecheck- verify-swift
1
+ // RUN: %target-swift-frontend -emit-silgen %s - verify -warn-implicit-overrides | %FileCheck %s
2
2
3
3
protocol Base {
4
- func foo1< T : P > ( _: T , _ : T . T )
4
+ func foo1< T : P > ( _: T )
5
5
func foo2< T : P > ( _: T , _: T . T )
6
+ func foo3< T : P > ( _: T , _: T . T )
6
7
}
7
8
8
9
protocol 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 )
11
13
}
12
14
13
15
protocol P {
@@ -17,3 +19,28 @@ protocol P {
17
19
protocol Q {
18
20
associatedtype T
19
21
}
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