Skip to content

Commit 1b0759d

Browse files
authored
Merge pull request #42020 from slavapestov/rqm-test-case
Add a test case from a bug report in a forum post
2 parents 0c27193 + 7c5b3cc commit 1b0759d

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// RUN: %target-typecheck-verify-swift %s -requirement-machine-protocol-signatures=on
2+
// RUN: %target-swift-frontend -typecheck %s -debug-generic-signatures -requirement-machine-protocol-signatures=on 2>&1 | %FileCheck %s
3+
4+
// The GenericSignatureBuilder was unable to derive the redundant conformance requirement 'B: P4'
5+
// in protocol P1.
6+
//
7+
// This version includes the requirement; see interdependent_protocol_conformance_example_2 for
8+
// the other case.
9+
10+
// CHECK-LABEL: .P1@
11+
// CHECK-NEXT: Requirement signature: <Self where Self.[P1]A : P2, Self.[P1]B == Self.[P1]A.[P2]B>
12+
protocol P1 {
13+
associatedtype A: P2 where Self.A.B == Self.B
14+
associatedtype B: P4
15+
// expected-warning@-1 {{redundant conformance constraint 'Self.B' : 'P4'}}
16+
}
17+
18+
// CHECK-LABEL: .P2@
19+
// CHECK-NEXT: Requirement signature: <Self where Self.[P2]B == Self.[P2]C.[P3]B, Self.[P2]C : P3>
20+
protocol P2 {
21+
associatedtype B
22+
associatedtype C: P3 where Self.C.B == Self.B
23+
}
24+
25+
// CHECK-LABEL: .P3@
26+
// CHECK-NEXT: Requirement signature: <Self where Self.[P3]B : P4>
27+
protocol P3 {
28+
associatedtype B: P4
29+
}
30+
31+
// CHECK-LABEL: .P4@
32+
// CHECK-NEXT: Requirement signature: <Self where Self == Self.[P4]A.[P2]B, Self.[P4]A : P2>
33+
protocol P4 {
34+
associatedtype A: P2 where Self.A.B == Self
35+
}
36+
37+
func takesP4<T : P4>(_: T.Type) {}
38+
39+
func testP1<T : P1>(_: T) {
40+
takesP4(T.B.self)
41+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// RUN: %target-typecheck-verify-swift %s -requirement-machine-protocol-signatures=on
2+
// RUN: %target-swift-frontend -typecheck %s -debug-generic-signatures -requirement-machine-protocol-signatures=on 2>&1 | %FileCheck %s
3+
4+
// The GenericSignatureBuilder was unable to derive the redundant conformance requirement 'B: P4'
5+
// in protocol P1.
6+
//
7+
// This version omits the requirement; see interdependent_protocol_conformance_example_1 for
8+
// the other case.
9+
10+
// CHECK-LABEL: .P1@
11+
// CHECK-NEXT: Requirement signature: <Self where Self.[P1]A : P2, Self.[P1]B == Self.[P1]A.[P2]B>
12+
protocol P1 {
13+
associatedtype A: P2 where Self.A.B == Self.B
14+
associatedtype B
15+
}
16+
17+
// CHECK-LABEL: .P2@
18+
// CHECK-NEXT: Requirement signature: <Self where Self.[P2]B == Self.[P2]C.[P3]B, Self.[P2]C : P3>
19+
protocol P2 {
20+
associatedtype B
21+
associatedtype C: P3 where Self.C.B == Self.B
22+
}
23+
24+
// CHECK-LABEL: .P3@
25+
// CHECK-NEXT: Requirement signature: <Self where Self.[P3]B : P4>
26+
protocol P3 {
27+
associatedtype B: P4
28+
}
29+
30+
// CHECK-LABEL: .P4@
31+
// CHECK-NEXT: Requirement signature: <Self where Self == Self.[P4]A.[P2]B, Self.[P4]A : P2>
32+
protocol P4 {
33+
associatedtype A: P2 where Self.A.B == Self
34+
}
35+
36+
func takesP4<T : P4>(_: T.Type) {}
37+
38+
func testP1<T : P1>(_: T) {
39+
takesP4(T.B.self)
40+
}

0 commit comments

Comments
 (0)