1
- // RUN: %target-typecheck-verify-swift -dump-requirement-machine 2>&1 | %FileCheck %s
1
+ // RUN: %target-typecheck-verify-swift -debug-generic-signatures -requirement-machine-inferred-signatures=off 2>&1 | %FileCheck %s
2
+ // RUN: %target-typecheck-verify-swift -dump-requirement-machine -requirement-machine-inferred-signatures=off 2>&1 | %FileCheck %s --check-prefix=CHECK-RULE
2
3
3
4
// Note: The GSB fails this test, because it doesn't implement unification of
4
5
// superclass type constructor arguments.
5
6
7
+ // FIXME: The Requirement Machine also fails to minimize the signature of
8
+ // unifySuperclassTest(). rdar://90469643
9
+
6
10
class Generic < T, U, V> { }
7
11
8
12
class Derived < TT, UU> : Generic < Int , TT , UU > { }
@@ -23,32 +27,34 @@ func sameType<T>(_: T.Type, _: T.Type) {}
23
27
24
28
func takesDerivedString< U> ( _: Derived < String , U > . Type ) { }
25
29
30
+ // CHECK-LABEL: .unifySuperclassTest@
31
+ // CHECK-NEXT: Generic signature: <T where T : P1, T : P2>
26
32
func unifySuperclassTest< T : P1 & P2 > ( _: T ) {
27
33
sameType ( T . A1. self, String . self)
28
34
sameType ( T . A2. self, Int . self)
29
35
sameType ( T . B1. self, T . B2. self)
30
36
takesDerivedString ( T . X. self)
31
37
}
32
38
33
- // CHECK-LABEL: Requirement machine for <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2>
34
- // CHECK-NEXT: Rewrite system: {
35
- // CHECK: - [P1:X].[layout: _NativeClass] => [P1:X]
36
- // CHECK: - [P2:X].[layout: _NativeClass] => [P2:X]
37
- // CHECK: - τ_0_0.[P2:X] => τ_0_0.[P1:X]
38
- // CHECK: - τ_0_0.[P1:X].[superclass: Generic<Int, τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
39
- // CHECK: - τ_0_0.[P1:X].[superclass: Generic<Int, String, τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
40
- // CHECK: - τ_0_0.[P2:A2].[concrete: Int] => τ_0_0.[P2:A2]
41
- // CHECK: - τ_0_0.[P2:B2] => τ_0_0.[P1:B1]
42
- // CHECK: - τ_0_0.[P1:A1].[concrete: String] => τ_0_0.[P1:A1]
43
- // CHECK: - τ_0_0.B2 => τ_0_0.[P1:B1]
44
- // CHECK: }
45
- // CHECK: Property map: {
46
- // CHECK-NEXT: [P1] => { conforms_to: [P1] }
47
- // CHECK-NEXT: [P1:X] => { layout: _NativeClass superclass: [superclass: Derived<[P1:A1], [P1:B1]>] }
48
- // CHECK-NEXT: [P2] => { conforms_to: [P2] }
49
- // CHECK-NEXT: [P2:X] => { layout: _NativeClass superclass: [superclass: Generic<[P2:A2], String, [P2:B2]>] }
50
- // CHECK-NEXT: τ_0_0 => { conforms_to: [P1 P2] }
51
- // CHECK-NEXT: τ_0_0.[P1:X] => { layout: _NativeClass superclass: [superclass: Derived<τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] }
52
- // CHECK-NEXT: τ_0_0.[P2:A2] => { concrete_type: [concrete: Int] }
53
- // CHECK-NEXT: τ_0_0.[P1:A1] => { concrete_type: [concrete: String] }
54
- // CHECK-NEXT: }
39
+ // CHECK-RULE- LABEL: Requirement machine for <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2>
40
+ // CHECK-RULE- NEXT: Rewrite system: {
41
+ // CHECK-RULE : - [P1:X].[layout: _NativeClass] => [P1:X]
42
+ // CHECK-RULE : - [P2:X].[layout: _NativeClass] => [P2:X]
43
+ // CHECK-RULE : - τ_0_0.[P2:X] => τ_0_0.[P1:X]
44
+ // CHECK-RULE : - τ_0_0.[P1:X].[superclass: Generic<Int, τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
45
+ // CHECK-RULE : - τ_0_0.[P1:X].[superclass: Generic<Int, String, τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
46
+ // CHECK-RULE : - τ_0_0.[P2:A2].[concrete: Int] => τ_0_0.[P2:A2]
47
+ // CHECK-RULE : - τ_0_0.[P2:B2] => τ_0_0.[P1:B1]
48
+ // CHECK-RULE : - τ_0_0.[P1:A1].[concrete: String] => τ_0_0.[P1:A1]
49
+ // CHECK-RULE : - τ_0_0.B2 => τ_0_0.[P1:B1]
50
+ // CHECK-RULE : }
51
+ // CHECK-RULE : Property map: {
52
+ // CHECK-RULE- NEXT: [P1] => { conforms_to: [P1] }
53
+ // CHECK-RULE- NEXT: [P1:X] => { layout: _NativeClass superclass: [superclass: Derived<[P1:A1], [P1:B1]>] }
54
+ // CHECK-RULE- NEXT: [P2] => { conforms_to: [P2] }
55
+ // CHECK-RULE- NEXT: [P2:X] => { layout: _NativeClass superclass: [superclass: Generic<[P2:A2], String, [P2:B2]>] }
56
+ // CHECK-RULE- NEXT: τ_0_0 => { conforms_to: [P1 P2] }
57
+ // CHECK-RULE- NEXT: τ_0_0.[P1:X] => { layout: _NativeClass superclass: [superclass: Derived<τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] }
58
+ // CHECK-RULE- NEXT: τ_0_0.[P2:A2] => { concrete_type: [concrete: Int] }
59
+ // CHECK-RULE- NEXT: τ_0_0.[P1:A1] => { concrete_type: [concrete: String] }
60
+ // CHECK-RULE- NEXT: }
0 commit comments