Files
swift-mirror/test/Generics/conformance_access_path.swift
Doug Gregor f469928c24 [Type checker] Drop verbose conformance-access-path debugging dumps.
Under -debug-generic-signatures, we were computing and emitting
conformance access paths for one test. Given that conformance access
paths are used ubiquitously now, this test isn't providing any value
(nor is the debug dump), stop dumpoing them.
2018-12-04 20:01:14 -08:00

65 lines
1.3 KiB
Swift

// RUN: %target-typecheck-verify-swift -typecheck -swift-version 4 %s -verify
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())
}
protocol P6Unordered: P5Unordered { // expected-note{{conformance constraint 'Self.A': 'P0' implied here}}
associatedtype A: P0 // expected-warning{{redundant conformance constraint 'Self.A': 'P0'}}
// expected-warning@-1{{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())
}