@@ -42,6 +42,11 @@ class C1 {
42
42
43
43
func f2( ) -> Int { }
44
44
45
+ @discardableResult
46
+ func f1Optional( ) -> Int ? { }
47
+
48
+ func f2Optional( ) -> Int ? { }
49
+
45
50
@discardableResult
46
51
func me( ) -> Self { return self }
47
52
@@ -68,6 +73,10 @@ func testFunctionsInClass(c1 : C1, c2: C2) {
68
73
c1. f2 ( ) // expected-warning {{result of call to 'f2()' is unused}}
69
74
_ = c1. f2 ( ) // okay
70
75
76
+ c1. f1Optional ( ) // okay
77
+ c1. f2Optional ( ) // expected-warning {{result of call to 'f2Optional()' is unused}}
78
+ _ = c1. f2Optional ( ) // okay
79
+
71
80
c1. me ( ) // okay
72
81
c2. me ( ) // okay
73
82
@@ -91,6 +100,11 @@ struct S1 {
91
100
func f1( ) -> Int { }
92
101
93
102
func f2( ) -> Int { }
103
+
104
+ @discardableResult
105
+ func f1Optional( ) -> Int ? { }
106
+
107
+ func f2Optional( ) -> Int ? { }
94
108
}
95
109
96
110
func testFunctionsInStruct( s1 : S1 ) {
@@ -106,6 +120,10 @@ func testFunctionsInStruct(s1 : S1) {
106
120
s1. f1 ( ) // okay
107
121
s1. f2 ( ) // expected-warning {{result of call to 'f2()' is unused}}
108
122
_ = s1. f2 ( ) // okay
123
+
124
+ s1. f1Optional ( ) // okay
125
+ s1. f2Optional ( ) // expected-warning {{result of call to 'f2Optional()' is unused}}
126
+ _ = s1. f2Optional ( ) // okay
109
127
}
110
128
111
129
protocol P1 {
@@ -138,3 +156,23 @@ class X {
138
156
@objc
139
157
func h( ) -> Int { }
140
158
}
159
+
160
+ func testOptionalChaining( c1: C1 ? , s1: S1 ? ) {
161
+ c1? . f1 ( ) // okay
162
+ c1!. f1 ( ) // okay
163
+ c1? . f1Optional ( ) // okay
164
+ c1!. f1Optional ( ) // okay
165
+ c1? . f2 ( ) // expected-warning {{result of call to 'f2()' is unused}}
166
+ c1!. f2 ( ) // expected-warning {{result of call to 'f2()' is unused}}
167
+ c1? . f2Optional ( ) // expected-warning {{result of call to 'f2Optional()' is unused}}
168
+ c1!. f2Optional ( ) // expected-warning {{result of call to 'f2Optional()' is unused}}
169
+
170
+ s1? . f1 ( ) // okay
171
+ s1!. f1 ( ) // okay
172
+ s1? . f1Optional ( ) // okay
173
+ s1!. f1Optional ( ) // okay
174
+ s1? . f2 ( ) // expected-warning {{result of call to 'f2()' is unused}}
175
+ s1!. f2 ( ) // expected-warning {{result of call to 'f2()' is unused}}
176
+ s1? . f2Optional ( ) // expected-warning {{result of call to 'f2Optional()' is unused}}
177
+ s1!. f2Optional ( ) // expected-warning {{result of call to 'f2Optional()' is unused}}
178
+ }
0 commit comments