forked from swiftlang/swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfailure.swift
114 lines (88 loc) · 2.66 KB
/
failure.swift
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// RUN: %target-typecheck-verify-swift
protocol P1 {
func foo() // expected-note {{protocol requires function 'foo()'}}
func bar() // okay
}
extension P1 {
func bar() {} // okay
}
struct P1Conformer : P1 {} // expected-error {{does not conform}}
protocol P2 {
func foo() // expected-note {{protocol requires function 'foo()'}}
func bar() // expected-note {{protocol requires function 'bar()'}}
}
protocol P2Helper {}
extension P2 where Self : P2Helper {
func bar() {} // expected-note {{candidate}}
}
struct P2Conformer : P2 {} // expected-error {{does not conform}}
protocol P3 {
func foo() // expected-note {{protocol requires function 'foo()'}}
func bar() // okay
func baz() -> Baz
associatedtype Baz
}
extension P3 {
func bar() {} // okay
}
struct P3Conformer : P3 { // expected-error {{does not conform}}
func baz() -> Int { return 0 }
}
protocol P4 {
func foo() // expected-note {{protocol requires function 'foo()'}}
func bar() // expected-note {{protocol requires function 'bar()'}}
func baz() -> Baz // okay
associatedtype Baz
}
protocol P4Helper {}
extension P4 where Self : P4Helper {
func bar() {} // expected-note {{candidate}}
}
struct P4Conformer : P4 { // expected-error {{does not conform}}
func baz() -> Int { return 0 }
}
protocol P5 {
associatedtype Foo
func foo() -> Foo // expected-note {{protocol requires function 'foo()'}}
func bar() -> Foo // okay
func baz() -> Foo // okay
}
extension P5 {
func bar() -> Foo { return foo() } // okay
}
struct P5Conformer : P5 { // expected-error {{does not conform}}
func baz() -> Int { return 0 }
}
protocol P6Base {
associatedtype Foo // expected-note {{protocol requires nested type 'Foo'; do you want to add it?}}
func foo()
func bar() -> Foo
}
extension P6Base {
}
protocol P6 : P6Base {
associatedtype Bar // expected-note {{protocol requires nested type 'Bar'}}
}
extension P6 {
func bar() -> Bar? { return nil }
}
struct P6Conformer : P6 { // expected-error 2 {{does not conform}}
func foo() {}
}
// rdar://problem/23033862
// expected-error@+2{{type 'A' does not conform to protocol 'OptionSet'}}
// expected-error@+1{{type 'A' does not conform to protocol 'RawRepresentable'}}
struct A: OptionSet {
let rawValue = 0
init() { } // expected-note 2{{candidate has non-matching type '()'}}
}
// FIXME: Crappy diagnostic
protocol PA {
associatedtype A // expected-note 2 {{protocol requires nested type 'A'; do you want to add it?}}
}
struct BadCase1 : PA { // expected-error {{type 'BadCase1' does not conform to protocol 'PA'}}
struct A<T> {}
}
struct BadCase2 : PA { // expected-error {{type 'BadCase2' does not conform to protocol 'PA'}}
typealias A<T> = T
}