#![deny(clippy::iter_out_of_bounds)] #![allow(clippy::useless_vec)] fn opaque_empty_iter() -> impl Iterator { 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::; 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) {} }