[INFO] updating cached repository hellerve/chip8 [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/hellerve/chip8 [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/hellerve/chip8" "work/ex/clippy-test-run/sources/stable/gh/hellerve/chip8"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/hellerve/chip8'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/hellerve/chip8" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/hellerve/chip8"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/hellerve/chip8'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 3a02a6ccc19b82da2415b828b59fe0e34803d050 [INFO] sha for GitHub repo hellerve/chip8: 3a02a6ccc19b82da2415b828b59fe0e34803d050 [INFO] validating manifest of hellerve/chip8 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of hellerve/chip8 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing hellerve/chip8 [INFO] finished frobbing hellerve/chip8 [INFO] frobbed toml for hellerve/chip8 written to work/ex/clippy-test-run/sources/stable/gh/hellerve/chip8/Cargo.toml [INFO] started frobbing hellerve/chip8 [INFO] finished frobbing hellerve/chip8 [INFO] frobbed toml for hellerve/chip8 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/hellerve/chip8/Cargo.toml [INFO] crate hellerve/chip8 has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting hellerve/chip8 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/hellerve/chip8:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 7dce958a2b499f1d9d45410b4ffc88d2c83eccc312362c3e8d68dd342e5531ef [INFO] running `"docker" "start" "-a" "7dce958a2b499f1d9d45410b4ffc88d2c83eccc312362c3e8d68dd342e5531ef"` [INFO] [stderr] Checking parking_lot_core v0.2.14 [INFO] [stderr] Compiling glutin v0.18.0 [INFO] [stderr] Checking wayland-client v0.20.11 [INFO] [stderr] Checking parking_lot v0.6.3 [INFO] [stderr] Checking wayland-protocols v0.20.11 [INFO] [stderr] Checking smithay-client-toolkit v0.2.6 [INFO] [stderr] Checking winit v0.17.1 [INFO] [stderr] Checking chip8 v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/vm.rs:340:9 [INFO] [stderr] | [INFO] [stderr] 340 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/vm.rs:340:9 [INFO] [stderr] | [INFO] [stderr] 340 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `FONTSET` [INFO] [stderr] --> src/vm.rs:61:18 [INFO] [stderr] | [INFO] [stderr] 61 | for i in 0..80 { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 61 | for (i, ) in FONTSET.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/vm.rs:61:18 [INFO] [stderr] | [INFO] [stderr] 61 | for i in 0..80 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `self.memory[..80].clone_from_slice(&FONTSET[..80])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `contents` [INFO] [stderr] --> src/vm.rs:72:18 [INFO] [stderr] | [INFO] [stderr] 72 | for i in 0..contents.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 72 | for (i, ) in contents.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/vm.rs:73:34 [INFO] [stderr] | [INFO] [stderr] 73 | self.memory[i+512] = contents[i] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u16::from(contents[i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/vm.rs:79:5 [INFO] [stderr] | [INFO] [stderr] 79 | / pub fn cycle(&mut self) -> Result<(), &str> { [INFO] [stderr] 80 | | let op = self.memory[self.pc as usize] << 8 | self.memory[(self.pc+1) as usize]; [INFO] [stderr] 81 | | [INFO] [stderr] 82 | | let idx = ((op & 0x0f00) >> 8) as usize; [INFO] [stderr] ... | [INFO] [stderr] 340 | | return Ok(()); [INFO] [stderr] 341 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: unused comparison that must be used [INFO] [stderr] --> src/vm.rs:146:25 [INFO] [stderr] | [INFO] [stderr] 146 | self.v[idx] != self.v[idy]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] [INFO] [stderr] warning: statement with no effect [INFO] [stderr] --> src/vm.rs:146:25 [INFO] [stderr] | [INFO] [stderr] 146 | self.v[idx] != self.v[idy]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::no_effect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#no_effect [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / match res { [INFO] [stderr] 24 | | Err(x) => { [INFO] [stderr] 25 | | println!("{}", x); [INFO] [stderr] 26 | | return [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | Ok(_) => {} [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 23 | if let Err(x) = res { [INFO] [stderr] 24 | println!("{}", x); [INFO] [stderr] 25 | return [INFO] [stderr] 26 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | / match event { [INFO] [stderr] 52 | | glutin::Event::WindowEvent{ event, .. } => match event { [INFO] [stderr] 53 | | glutin::WindowEvent::CloseRequested => running = false, [INFO] [stderr] 54 | | glutin::WindowEvent::Resized(logical_size) => { [INFO] [stderr] ... | [INFO] [stderr] 60 | | _ => () [INFO] [stderr] 61 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 51 | if let glutin::Event::WindowEvent{ event, .. } = event { match event { [INFO] [stderr] 52 | glutin::WindowEvent::CloseRequested => running = false, [INFO] [stderr] 53 | glutin::WindowEvent::Resized(logical_size) => { [INFO] [stderr] 54 | let dpi_factor = gl_window.get_hidpi_factor(); [INFO] [stderr] 55 | gl_window.resize(logical_size.to_physical(dpi_factor)); [INFO] [stderr] 56 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match res { [INFO] [stderr] 73 | | Err(x) => { [INFO] [stderr] 74 | | println!("{}", x); [INFO] [stderr] 75 | | return [INFO] [stderr] 76 | | } [INFO] [stderr] 77 | | Ok(_) => {} [INFO] [stderr] 78 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 72 | if let Err(x) = res { [INFO] [stderr] 73 | println!("{}", x); [INFO] [stderr] 74 | return [INFO] [stderr] 75 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `FONTSET` [INFO] [stderr] --> src/vm.rs:61:18 [INFO] [stderr] | [INFO] [stderr] 61 | for i in 0..80 { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 61 | for (i, ) in FONTSET.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/vm.rs:61:18 [INFO] [stderr] | [INFO] [stderr] 61 | for i in 0..80 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `self.memory[..80].clone_from_slice(&FONTSET[..80])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `contents` [INFO] [stderr] --> src/vm.rs:72:18 [INFO] [stderr] | [INFO] [stderr] 72 | for i in 0..contents.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 72 | for (i, ) in contents.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/vm.rs:73:34 [INFO] [stderr] | [INFO] [stderr] 73 | self.memory[i+512] = contents[i] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u16::from(contents[i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/vm.rs:79:5 [INFO] [stderr] | [INFO] [stderr] 79 | / pub fn cycle(&mut self) -> Result<(), &str> { [INFO] [stderr] 80 | | let op = self.memory[self.pc as usize] << 8 | self.memory[(self.pc+1) as usize]; [INFO] [stderr] 81 | | [INFO] [stderr] 82 | | let idx = ((op & 0x0f00) >> 8) as usize; [INFO] [stderr] ... | [INFO] [stderr] 340 | | return Ok(()); [INFO] [stderr] 341 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: unused comparison that must be used [INFO] [stderr] --> src/vm.rs:146:25 [INFO] [stderr] | [INFO] [stderr] 146 | self.v[idx] != self.v[idy]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] [INFO] [stderr] warning: statement with no effect [INFO] [stderr] --> src/vm.rs:146:25 [INFO] [stderr] | [INFO] [stderr] 146 | self.v[idx] != self.v[idy]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::no_effect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#no_effect [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / match res { [INFO] [stderr] 24 | | Err(x) => { [INFO] [stderr] 25 | | println!("{}", x); [INFO] [stderr] 26 | | return [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | Ok(_) => {} [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 23 | if let Err(x) = res { [INFO] [stderr] 24 | println!("{}", x); [INFO] [stderr] 25 | return [INFO] [stderr] 26 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | / match event { [INFO] [stderr] 52 | | glutin::Event::WindowEvent{ event, .. } => match event { [INFO] [stderr] 53 | | glutin::WindowEvent::CloseRequested => running = false, [INFO] [stderr] 54 | | glutin::WindowEvent::Resized(logical_size) => { [INFO] [stderr] ... | [INFO] [stderr] 60 | | _ => () [INFO] [stderr] 61 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 51 | if let glutin::Event::WindowEvent{ event, .. } = event { match event { [INFO] [stderr] 52 | glutin::WindowEvent::CloseRequested => running = false, [INFO] [stderr] 53 | glutin::WindowEvent::Resized(logical_size) => { [INFO] [stderr] 54 | let dpi_factor = gl_window.get_hidpi_factor(); [INFO] [stderr] 55 | gl_window.resize(logical_size.to_physical(dpi_factor)); [INFO] [stderr] 56 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match res { [INFO] [stderr] 73 | | Err(x) => { [INFO] [stderr] 74 | | println!("{}", x); [INFO] [stderr] 75 | | return [INFO] [stderr] 76 | | } [INFO] [stderr] 77 | | Ok(_) => {} [INFO] [stderr] 78 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 72 | if let Err(x) = res { [INFO] [stderr] 73 | println!("{}", x); [INFO] [stderr] 74 | return [INFO] [stderr] 75 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 25.47s [INFO] running `"docker" "inspect" "7dce958a2b499f1d9d45410b4ffc88d2c83eccc312362c3e8d68dd342e5531ef"` [INFO] running `"docker" "rm" "-f" "7dce958a2b499f1d9d45410b4ffc88d2c83eccc312362c3e8d68dd342e5531ef"` [INFO] [stdout] 7dce958a2b499f1d9d45410b4ffc88d2c83eccc312362c3e8d68dd342e5531ef