Skip to content

Commit d2863e3

Browse files
committed
add test for issue#14847
1 parent cadf98b commit d2863e3

File tree

2 files changed

+86
-45
lines changed

2 files changed

+86
-45
lines changed

tests/ui/useless_conversion.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,18 @@ fn main() {
175175
let _ = vec![s4, s4, s4].into_iter().into_iter();
176176
//~^ useless_conversion
177177

178+
issue14847();
178179
issue11300::bar();
179180
}
180181

182+
fn issue14847() {
183+
use std::option::IntoIter;
184+
fn takes_into_iter<'a>(_: impl IntoIterator<Item = &'a i32>) {}
185+
186+
let x = &&[1];
187+
let _ = takes_into_iter(x.into_iter());
188+
}
189+
181190
#[allow(dead_code)]
182191
fn issue11065_fp() {
183192
use std::option::IntoIter;

tests/ui/useless_conversion.stderr

Lines changed: 77 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -118,188 +118,223 @@ error: useless conversion to the same type: `std::vec::IntoIter<Foo<'a'>>`
118118
LL | let _ = vec![s4, s4, s4].into_iter().into_iter();
119119
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `vec![s4, s4, s4].into_iter()`
120120

121+
error: this let-binding has unit value
122+
--> tests/ui/useless_conversion.rs:187:5
123+
|
124+
LL | let _ = takes_into_iter(x.into_iter());
125+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: omit the `let` binding: `takes_into_iter(x.into_iter());`
126+
|
127+
= note: `-D clippy::let-unit-value` implied by `-D warnings`
128+
= help: to override `-D warnings` add `#[allow(clippy::let_unit_value)]`
129+
130+
error: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `array`
131+
--> tests/ui/useless_conversion.rs:187:31
132+
|
133+
LL | let _ = takes_into_iter(x.into_iter());
134+
| ^^^^^^^^^ help: call directly: `iter`
135+
|
136+
= note: `-D clippy::into-iter-on-ref` implied by `-D warnings`
137+
= help: to override `-D warnings` add `#[allow(clippy::into_iter_on_ref)]`
138+
139+
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
140+
--> tests/ui/useless_conversion.rs:187:29
141+
|
142+
LL | let _ = takes_into_iter(x.into_iter());
143+
| ^^^^^^^^^^^^^
144+
|
145+
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
146+
--> tests/ui/useless_conversion.rs:184:36
147+
|
148+
LL | fn takes_into_iter<'a>(_: impl IntoIterator<Item = &'a i32>) {}
149+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
150+
help: consider removing the `.into_iter()`
151+
|
152+
LL - let _ = takes_into_iter(x.into_iter());
153+
LL + let _ = takes_into_iter(*x);
154+
|
155+
121156
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
122-
--> tests/ui/useless_conversion.rs:208:7
157+
--> tests/ui/useless_conversion.rs:217:7
123158
|
124159
LL | b(vec![1, 2].into_iter());
125160
| ^^^^^^^^^^------------
126161
| |
127162
| help: consider removing the `.into_iter()`
128163
|
129164
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
130-
--> tests/ui/useless_conversion.rs:198:13
165+
--> tests/ui/useless_conversion.rs:207:13
131166
|
132167
LL | fn b<T: IntoIterator<Item = i32>>(_: T) {}
133168
| ^^^^^^^^^^^^^^^^^^^^^^^^
134169

135170
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
136-
--> tests/ui/useless_conversion.rs:210:7
171+
--> tests/ui/useless_conversion.rs:219:7
137172
|
138173
LL | c(vec![1, 2].into_iter());
139174
| ^^^^^^^^^^------------
140175
| |
141176
| help: consider removing the `.into_iter()`
142177
|
143178
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
144-
--> tests/ui/useless_conversion.rs:199:18
179+
--> tests/ui/useless_conversion.rs:208:18
145180
|
146181
LL | fn c(_: impl IntoIterator<Item = i32>) {}
147182
| ^^^^^^^^^^^^^^^^^^^^^^^^
148183

149184
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
150-
--> tests/ui/useless_conversion.rs:212:7
185+
--> tests/ui/useless_conversion.rs:221:7
151186
|
152187
LL | d(vec![1, 2].into_iter());
153188
| ^^^^^^^^^^------------
154189
| |
155190
| help: consider removing the `.into_iter()`
156191
|
157192
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
158-
--> tests/ui/useless_conversion.rs:202:12
193+
--> tests/ui/useless_conversion.rs:211:12
159194
|
160195
LL | T: IntoIterator<Item = i32>,
161196
| ^^^^^^^^^^^^^^^^^^^^^^^^
162197

163198
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
164-
--> tests/ui/useless_conversion.rs:216:7
199+
--> tests/ui/useless_conversion.rs:225:7
165200
|
166201
LL | b(vec![1, 2].into_iter().into_iter());
167202
| ^^^^^^^^^^------------------------
168203
| |
169204
| help: consider removing the `.into_iter()`s
170205
|
171206
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
172-
--> tests/ui/useless_conversion.rs:198:13
207+
--> tests/ui/useless_conversion.rs:207:13
173208
|
174209
LL | fn b<T: IntoIterator<Item = i32>>(_: T) {}
175210
| ^^^^^^^^^^^^^^^^^^^^^^^^
176211

177212
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
178-
--> tests/ui/useless_conversion.rs:218:7
213+
--> tests/ui/useless_conversion.rs:227:7
179214
|
180215
LL | b(vec![1, 2].into_iter().into_iter().into_iter());
181216
| ^^^^^^^^^^------------------------------------
182217
| |
183218
| help: consider removing the `.into_iter()`s
184219
|
185220
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
186-
--> tests/ui/useless_conversion.rs:198:13
221+
--> tests/ui/useless_conversion.rs:207:13
187222
|
188223
LL | fn b<T: IntoIterator<Item = i32>>(_: T) {}
189224
| ^^^^^^^^^^^^^^^^^^^^^^^^
190225

191226
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
192-
--> tests/ui/useless_conversion.rs:265:24
227+
--> tests/ui/useless_conversion.rs:274:24
193228
|
194229
LL | foo2::<i32, _>([1, 2, 3].into_iter());
195230
| ^^^^^^^^^------------
196231
| |
197232
| help: consider removing the `.into_iter()`
198233
|
199234
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
200-
--> tests/ui/useless_conversion.rs:244:12
235+
--> tests/ui/useless_conversion.rs:253:12
201236
|
202237
LL | I: IntoIterator<Item = i32> + Helper<X>,
203238
| ^^^^^^^^^^^^^^^^^^^^^^^^
204239

205240
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
206-
--> tests/ui/useless_conversion.rs:274:14
241+
--> tests/ui/useless_conversion.rs:283:14
207242
|
208243
LL | foo3([1, 2, 3].into_iter());
209244
| ^^^^^^^^^------------
210245
| |
211246
| help: consider removing the `.into_iter()`
212247
|
213248
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
214-
--> tests/ui/useless_conversion.rs:253:12
249+
--> tests/ui/useless_conversion.rs:262:12
215250
|
216251
LL | I: IntoIterator<Item = i32>,
217252
| ^^^^^^^^^^^^^^^^^^^^^^^^
218253

219254
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
220-
--> tests/ui/useless_conversion.rs:284:16
255+
--> tests/ui/useless_conversion.rs:293:16
221256
|
222257
LL | S1.foo([1, 2].into_iter());
223258
| ^^^^^^------------
224259
| |
225260
| help: consider removing the `.into_iter()`
226261
|
227262
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
228-
--> tests/ui/useless_conversion.rs:281:27
263+
--> tests/ui/useless_conversion.rs:290:27
229264
|
230265
LL | pub fn foo<I: IntoIterator>(&self, _: I) {}
231266
| ^^^^^^^^^^^^
232267

233268
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
234-
--> tests/ui/useless_conversion.rs:304:44
269+
--> tests/ui/useless_conversion.rs:313:44
235270
|
236271
LL | v0.into_iter().interleave_shortest(v1.into_iter());
237272
| ^^------------
238273
| |
239274
| help: consider removing the `.into_iter()`
240275
|
241276
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
242-
--> tests/ui/useless_conversion.rs:291:20
277+
--> tests/ui/useless_conversion.rs:300:20
243278
|
244279
LL | J: IntoIterator,
245280
| ^^^^^^^^^^^^
246281

247282
error: useless conversion to the same type: `()`
248-
--> tests/ui/useless_conversion.rs:332:58
283+
--> tests/ui/useless_conversion.rs:341:58
249284
|
250285
LL | let _: Result<(), std::io::Error> = test_issue_3913().map(Into::into);
251286
| ^^^^^^^^^^^^^^^^ help: consider removing
252287

253288
error: useless conversion to the same type: `std::io::Error`
254-
--> tests/ui/useless_conversion.rs:335:58
289+
--> tests/ui/useless_conversion.rs:344:58
255290
|
256291
LL | let _: Result<(), std::io::Error> = test_issue_3913().map_err(Into::into);
257292
| ^^^^^^^^^^^^^^^^^^^^ help: consider removing
258293

259294
error: useless conversion to the same type: `()`
260-
--> tests/ui/useless_conversion.rs:338:58
295+
--> tests/ui/useless_conversion.rs:347:58
261296
|
262297
LL | let _: Result<(), std::io::Error> = test_issue_3913().map(From::from);
263298
| ^^^^^^^^^^^^^^^^ help: consider removing
264299

265300
error: useless conversion to the same type: `std::io::Error`
266-
--> tests/ui/useless_conversion.rs:341:58
301+
--> tests/ui/useless_conversion.rs:350:58
267302
|
268303
LL | let _: Result<(), std::io::Error> = test_issue_3913().map_err(From::from);
269304
| ^^^^^^^^^^^^^^^^^^^^ help: consider removing
270305

271306
error: useless conversion to the same type: `()`
272-
--> tests/ui/useless_conversion.rs:345:31
307+
--> tests/ui/useless_conversion.rs:354:31
273308
|
274309
LL | let _: ControlFlow<()> = c.map_break(Into::into);
275310
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing
276311

277312
error: useless conversion to the same type: `()`
278-
--> tests/ui/useless_conversion.rs:349:31
313+
--> tests/ui/useless_conversion.rs:358:31
279314
|
280315
LL | let _: ControlFlow<()> = c.map_continue(Into::into);
281316
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing
282317

283318
error: useless conversion to the same type: `u32`
284-
--> tests/ui/useless_conversion.rs:363:41
319+
--> tests/ui/useless_conversion.rs:372:41
285320
|
286321
LL | let _: Vec<u32> = [1u32].into_iter().map(Into::into).collect();
287322
| ^^^^^^^^^^^^^^^^ help: consider removing
288323

289324
error: useless conversion to the same type: `T`
290-
--> tests/ui/useless_conversion.rs:374:18
325+
--> tests/ui/useless_conversion.rs:383:18
291326
|
292327
LL | x.into_iter().map(Into::into).collect()
293328
| ^^^^^^^^^^^^^^^^ help: consider removing
294329

295330
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
296-
--> tests/ui/useless_conversion.rs:390:29
331+
--> tests/ui/useless_conversion.rs:399:29
297332
|
298333
LL | takes_into_iter(self.my_field.into_iter());
299334
| ^^^^^^^^^^^^^^^^^^^^^^^^^
300335
|
301336
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
302-
--> tests/ui/useless_conversion.rs:379:32
337+
--> tests/ui/useless_conversion.rs:388:32
303338
|
304339
LL | fn takes_into_iter(_: impl IntoIterator<Item = String>) {}
305340
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -310,13 +345,13 @@ LL + takes_into_iter(&self.my_field);
310345
|
311346

312347
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
313-
--> tests/ui/useless_conversion.rs:398:29
348+
--> tests/ui/useless_conversion.rs:407:29
314349
|
315350
LL | takes_into_iter(self.my_field.into_iter());
316351
| ^^^^^^^^^^^^^^^^^^^^^^^^^
317352
|
318353
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
319-
--> tests/ui/useless_conversion.rs:379:32
354+
--> tests/ui/useless_conversion.rs:388:32
320355
|
321356
LL | fn takes_into_iter(_: impl IntoIterator<Item = String>) {}
322357
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -327,13 +362,13 @@ LL + takes_into_iter(&mut self.my_field);
327362
|
328363

329364
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
330-
--> tests/ui/useless_conversion.rs:407:29
365+
--> tests/ui/useless_conversion.rs:416:29
331366
|
332367
LL | takes_into_iter(self.my_field.into_iter());
333368
| ^^^^^^^^^^^^^^^^^^^^^^^^^
334369
|
335370
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
336-
--> tests/ui/useless_conversion.rs:379:32
371+
--> tests/ui/useless_conversion.rs:388:32
337372
|
338373
LL | fn takes_into_iter(_: impl IntoIterator<Item = String>) {}
339374
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -344,30 +379,27 @@ LL + takes_into_iter(*self.my_field);
344379
|
345380

346381
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
347-
--> tests/ui/useless_conversion.rs:416:29
382+
--> tests/ui/useless_conversion.rs:425:29
348383
|
349384
LL | takes_into_iter(self.my_field.into_iter());
350-
| ^^^^^^^^^^^^^^^^^^^^^^^^^
385+
| ^^^^^^^^^^^^^------------
386+
| |
387+
| help: consider removing the `.into_iter()`
351388
|
352389
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
353-
--> tests/ui/useless_conversion.rs:379:32
390+
--> tests/ui/useless_conversion.rs:388:32
354391
|
355392
LL | fn takes_into_iter(_: impl IntoIterator<Item = String>) {}
356393
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
357-
help: consider removing the `.into_iter()`
358-
|
359-
LL - takes_into_iter(self.my_field.into_iter());
360-
LL + takes_into_iter(&*self.my_field);
361-
|
362394

363395
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
364-
--> tests/ui/useless_conversion.rs:425:29
396+
--> tests/ui/useless_conversion.rs:434:29
365397
|
366398
LL | takes_into_iter(self.my_field.into_iter());
367399
| ^^^^^^^^^^^^^^^^^^^^^^^^^
368400
|
369401
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
370-
--> tests/ui/useless_conversion.rs:379:32
402+
--> tests/ui/useless_conversion.rs:388:32
371403
|
372404
LL | fn takes_into_iter(_: impl IntoIterator<Item = String>) {}
373405
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -378,16 +410,16 @@ LL + takes_into_iter(&mut *self.my_field);
378410
|
379411

380412
error: useless conversion to the same type: `std::ops::Range<u32>`
381-
--> tests/ui/useless_conversion.rs:440:5
413+
--> tests/ui/useless_conversion.rs:449:5
382414
|
383415
LL | R.into_iter().for_each(|_x| {});
384416
| ^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `R`
385417

386418
error: useless conversion to the same type: `std::ops::Range<u32>`
387-
--> tests/ui/useless_conversion.rs:442:13
419+
--> tests/ui/useless_conversion.rs:451:13
388420
|
389421
LL | let _ = R.into_iter().map(|_x| 0);
390422
| ^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `R`
391423

392-
error: aborting due to 43 previous errors
424+
error: aborting due to 46 previous errors
393425

0 commit comments

Comments
 (0)