File: conformance_access_path.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (66 lines) | stat: -rw-r--r-- 1,370 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// RUN: %target-typecheck-verify-swift -swift-version 4
// RUN: %target-swift-frontend -typecheck %s -debug-generic-signatures 2>&1 | %FileCheck %s

protocol P0 { }
protocol Q0: P0 { }

protocol P1 {
	associatedtype AssocP1: Q0

	func getAssocP1() -> AssocP1
}

protocol P2 : P1 {
	associatedtype AssocP2: P1

	func getAssocP2() -> AssocP2
}

protocol P3 {
	associatedtype AssocP3: P0

	func getAssocP3() -> AssocP3
}

protocol P4: P3 { }

protocol P5 : P4 {
	associatedtype AssocP5 where AssocP3: Q0
}

func acceptP0<T: P0>(_: T) { }
func acceptQ0<T: Q0>(_: T) { }
func acceptP1<T: P1>(_: T) { }
func acceptP2<T: P2>(_: T) { }
func acceptP3<T: P3>(_: T) { }


func testPaths1<T: P2 & P4>(_ t: T) {
	acceptP0(t.getAssocP2().getAssocP1())
	acceptP0(t.getAssocP3())
}

func testPaths2<U: P2 & P4>(_ t: U) where U.AssocP3 == U.AssocP2.AssocP1 {
	acceptP0(t.getAssocP2().getAssocP1())
}

func testPaths3<V: P5>(_ v: V) {
	acceptP0(v.getAssocP3())
	acceptQ0(v.getAssocP3())
}

// CHECK-LABEL: .P6Unordered@
// CHECK-NEXT: Requirement signature: <Self where Self : P5Unordered>
protocol P6Unordered: P5Unordered {
	associatedtype A: P0 // expected-warning{{redeclaration of associated type 'A'}}
}

protocol P5Unordered {
	associatedtype A: P0 // expected-note{{'A' declared here}}

	func getA() -> A
}

func testUnorderedP5_P6<W: P6Unordered>(_ w: W) {
	acceptP0(w.getA())
}