blob: 6458b1342dcd5b3691bc017394da07a7d81bde30 [file] [log] [blame]
#![deny(clippy::iter_out_of_bounds)]
#![allow(clippy::useless_vec)]
fn opaque_empty_iter() -> impl Iterator<Item = ()> {
std::iter::empty()
}
fn main() {
#[allow(clippy::never_loop)]
for _ in [1, 2, 3].iter().skip(4) {
//~^ iter_out_of_bounds
unreachable!();
}
for (i, _) in [1, 2, 3].iter().take(4).enumerate() {
//~^ iter_out_of_bounds
assert!(i <= 2);
}
#[allow(clippy::needless_borrow)]
for _ in (&&&&&&[1, 2, 3]).iter().take(4) {}
//~^ iter_out_of_bounds
for _ in [1, 2, 3].iter().skip(4) {}
//~^ iter_out_of_bounds
for _ in [1; 3].iter().skip(4) {}
//~^ iter_out_of_bounds
// Should not lint
for _ in opaque_empty_iter().skip(1) {}
for _ in vec![1, 2, 3].iter().skip(4) {}
//~^ iter_out_of_bounds
for _ in vec![1; 3].iter().skip(4) {}
//~^ iter_out_of_bounds
let x = [1, 2, 3];
for _ in x.iter().skip(4) {}
//~^ iter_out_of_bounds
let n = 4;
for _ in x.iter().skip(n) {}
//~^ iter_out_of_bounds
let empty = std::iter::empty::<i8>;
for _ in empty().skip(1) {}
//~^ iter_out_of_bounds
for _ in empty().take(1) {}
//~^ iter_out_of_bounds
for _ in std::iter::once(1).skip(2) {}
//~^ iter_out_of_bounds
for _ in std::iter::once(1).take(2) {}
//~^ iter_out_of_bounds
for x in [].iter().take(1) {
//~^ iter_out_of_bounds
let _: &i32 = x;
}
// ok, not out of bounds
for _ in [1].iter().take(1) {}
for _ in [1, 2, 3].iter().take(2) {}
for _ in [1, 2, 3].iter().skip(2) {}
}