[INFO] crate euphrates_virtual_memory 0.1.0 is already in cache [INFO] extracting crate euphrates_virtual_memory 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/euphrates_virtual_memory/0.1.0 [INFO] extracting crate euphrates_virtual_memory 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/euphrates_virtual_memory/0.1.0 [INFO] validating manifest of euphrates_virtual_memory-0.1.0 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 euphrates_virtual_memory-0.1.0 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 euphrates_virtual_memory-0.1.0 [INFO] finished frobbing euphrates_virtual_memory-0.1.0 [INFO] frobbed toml for euphrates_virtual_memory-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/euphrates_virtual_memory/0.1.0/Cargo.toml [INFO] started frobbing euphrates_virtual_memory-0.1.0 [INFO] finished frobbing euphrates_virtual_memory-0.1.0 [INFO] frobbed toml for euphrates_virtual_memory-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/euphrates_virtual_memory/0.1.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [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 euphrates_virtual_memory-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/euphrates_virtual_memory/0.1.0:/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] 959e3492d38cd9a7fa135f5eb746c9a2ca41221931e71ff207f5f32e91474dda [INFO] running `"docker" "start" "-a" "959e3492d38cd9a7fa135f5eb746c9a2ca41221931e71ff207f5f32e91474dda"` [INFO] [stderr] Checking euphrates v0.1.0 [INFO] [stderr] Checking euphrates_virtual_memory v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/external.rs:37:12 [INFO] [stderr] | [INFO] [stderr] 37 | const map: unsafe fn( [INFO] [stderr] | ____________^ [INFO] [stderr] 38 | | logical: &mut Logical, [INFO] [stderr] 39 | | logical_page_start: usize, [INFO] [stderr] 40 | | physical: &Physical, [INFO] [stderr] ... | [INFO] [stderr] 44 | | execute: bool, [INFO] [stderr] 45 | | ) =
>::map; [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/external.rs:86:16 [INFO] [stderr] | [INFO] [stderr] 86 | if let None = self.half_cartridge_ram { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 87 | | unsafe { [INFO] [stderr] 88 | | self.half_cartridge_ram = Some(physical(0x2000, true, false)); [INFO] [stderr] 89 | | } [INFO] [stderr] 90 | | } [INFO] [stderr] | |_________- help: try this: `if self.half_cartridge_ram.is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/external.rs:166:28 [INFO] [stderr] | [INFO] [stderr] 166 | let phys = match &self.main_cartridge_ram { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 167 | | &MainCartridgeRam::One(ref x) => x, [INFO] [stderr] 168 | | &MainCartridgeRam::Two(ref x, _) => x, [INFO] [stderr] 169 | | _ => unreachable!(), [INFO] [stderr] 170 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 166 | let phys = match self.main_cartridge_ram { [INFO] [stderr] 167 | MainCartridgeRam::One(ref x) => x, [INFO] [stderr] 168 | MainCartridgeRam::Two(ref x, _) => x, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/external.rs:181:28 [INFO] [stderr] | [INFO] [stderr] 181 | let phys = match &self.main_cartridge_ram { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 182 | | &MainCartridgeRam::Two(_, ref x) => x, [INFO] [stderr] 183 | | _ => unreachable!(), [INFO] [stderr] 184 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 181 | let phys = match self.main_cartridge_ram { [INFO] [stderr] 182 | MainCartridgeRam::Two(_, ref x) => x, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/external.rs:272:25 [INFO] [stderr] | [INFO] [stderr] 272 | self.rom.deref().0.as_ptr().offset(rom_offset as isize), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.rom.deref().0.as_ptr().add(rom_offset)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_offset_with_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: The function/method `map` doesn't need a mutable reference [INFO] [stderr] --> src/external.rs:297:25 [INFO] [stderr] | [INFO] [stderr] 297 | &mut phys, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/external.rs:391:13 [INFO] [stderr] | [INFO] [stderr] 391 | / match &self.main_cartridge_ram { [INFO] [stderr] 392 | | &Zero => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 393 | | &One(ref x) => x.get(index), [INFO] [stderr] 394 | | &Two(ref x, ref y) => if index < 0x4000 { [INFO] [stderr] ... | [INFO] [stderr] 400 | | }, [INFO] [stderr] 401 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 391 | match self.main_cartridge_ram { [INFO] [stderr] 392 | Zero => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 393 | One(ref x) => x.get(index), [INFO] [stderr] 394 | Two(ref x, ref y) => if index < 0x4000 { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/external.rs:409:13 [INFO] [stderr] | [INFO] [stderr] 409 | / match &mut self.main_cartridge_ram { [INFO] [stderr] 410 | | &mut Zero => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 411 | | &mut One(ref mut x) => x.set(index, value), [INFO] [stderr] 412 | | &mut Two(ref mut x, ref mut y) => if index < 0x4000 { [INFO] [stderr] ... | [INFO] [stderr] 418 | | }, [INFO] [stderr] 419 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 409 | match *(&mut self.main_cartridge_ram) { [INFO] [stderr] 410 | Zero => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 411 | One(ref mut x) => x.set(index, value), [INFO] [stderr] 412 | Two(ref mut x, ref mut y) => if index < 0x4000 { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/external.rs:433:9 [INFO] [stderr] | [INFO] [stderr] 433 | / match &self.half_cartridge_ram { [INFO] [stderr] 434 | | &None => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 435 | | &Some(ref x) => unsafe { x.get(index) }, [INFO] [stderr] 436 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 433 | match self.half_cartridge_ram { [INFO] [stderr] 434 | None => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 435 | Some(ref x) => unsafe { x.get(index) }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/external.rs:441:9 [INFO] [stderr] | [INFO] [stderr] 441 | / match &mut self.half_cartridge_ram { [INFO] [stderr] 442 | | &mut None => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 443 | | &mut Some(ref mut x) => unsafe { x.set(index, value) }, [INFO] [stderr] 444 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 441 | match *(&mut self.half_cartridge_ram) { [INFO] [stderr] 442 | None => panic!("index out of bounds: got {} but len 0", index), [INFO] [stderr] 443 | Some(ref mut x) => unsafe { x.set(index, value) }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/external.rs:501:20 [INFO] [stderr] | [INFO] [stderr] 501 | pages: self.pages.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.pages` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer to a pointer [INFO] [stderr] --> src/posix.rs:14:22 [INFO] [stderr] | [INFO] [stderr] 14 | libc::perror(transmute(s.as_ptr())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `s.as_ptr() as *const i8` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer to a pointer [INFO] [stderr] --> src/posix.rs:83:28 [INFO] [stderr] | [INFO] [stderr] 83 | libc::mprotect(transmute(self.ptr), self.len * size_of::(), prot), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `self.ptr as *mut libc::c_void` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/posix.rs:103:10 [INFO] [stderr] | [INFO] [stderr] 103 | *self.ptr.offset(index as isize) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.ptr.add(index)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/posix.rs:107:10 [INFO] [stderr] | [INFO] [stderr] 107 | *self.ptr.offset(index as isize) = val; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.ptr.add(index)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer to a pointer [INFO] [stderr] --> src/posix.rs:127:30 [INFO] [stderr] | [INFO] [stderr] 127 | libc::munmap(transmute(self.ptr), self.len * size_of::()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `self.ptr as *mut libc::c_void` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer to a pointer [INFO] [stderr] --> src/posix.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / transmute(check_error( [INFO] [stderr] 155 | | libc::mmap(ptr::null_mut(), len2, prot, flags, fd, 0), [INFO] [stderr] 156 | | libc::MAP_FAILED, [INFO] [stderr] 157 | | "allocate_logical\0", [INFO] [stderr] 158 | | )) [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 154 | check_error( [INFO] [stderr] 155 | libc::mmap(ptr::null_mut(), len2, prot, flags, fd, 0), [INFO] [stderr] 156 | libc::MAP_FAILED, [INFO] [stderr] 157 | "allocate_logical\0", [INFO] [stderr] 158 | ) as *mut T [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/posix.rs:224:27 [INFO] [stderr] | [INFO] [stderr] 224 | let logical_ptr = logical.ptr.offset(logical_offset as isize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `logical.ptr.add(logical_offset)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer to a pointer [INFO] [stderr] --> src/posix.rs:234:17 [INFO] [stderr] | [INFO] [stderr] 234 | transmute(logical_ptr), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `logical_ptr as *mut libc::c_void` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] error[E0308]: mismatched types [INFO] [stderr] --> src/external.rs:606:37 [INFO] [stderr] | [INFO] [stderr] 606 | rom: Arc::new(Box::new([rom0, rom1])), [INFO] [stderr] | ^^^^ expected u8, found array of 16384 elements [INFO] [stderr] | [INFO] [stderr] = note: expected type `u8` [INFO] [stderr] found type `[u8; 16384]` [INFO] [stderr] [INFO] [stderr] error[E0277]: the size for values of type `[u8]` cannot be known at compilation time [INFO] [stderr] --> src/external.rs:606:27 [INFO] [stderr] | [INFO] [stderr] 606 | rom: Arc::new(Box::new([rom0, rom1])), [INFO] [stderr] | ^^^^^^^^ doesn't have a size known at compile-time [INFO] [stderr] | [INFO] [stderr] = help: the trait `std::marker::Sized` is not implemented for `[u8]` [INFO] [stderr] = note: to learn more, visit [INFO] [stderr] = note: required by `>::new` [INFO] [stderr] [INFO] [stderr] error[E0308]: mismatched types [INFO] [stderr] --> src/external.rs:608:17 [INFO] [stderr] | [INFO] [stderr] 608 | ram0, [INFO] [stderr] | ^^^^ expected u8, found array of 1024 elements [INFO] [stderr] | [INFO] [stderr] = note: expected type `u8` [INFO] [stderr] found type `[u8; 1024]` [INFO] [stderr] [INFO] [stderr] error[E0277]: the size for values of type `[u8]` cannot be known at compilation time [INFO] [stderr] --> src/external.rs:607:25 [INFO] [stderr] | [INFO] [stderr] 607 | system_ram: Box::new([ [INFO] [stderr] | ^^^^^^^^ doesn't have a size known at compile-time [INFO] [stderr] | [INFO] [stderr] = help: the trait `std::marker::Sized` is not implemented for `[u8]` [INFO] [stderr] = note: to learn more, visit [INFO] [stderr] = note: required by `>::new` [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] Some errors occurred: E0277, E0308. [INFO] [stderr] For more information about an error, try `rustc --explain E0277`. [INFO] [stderr] error: Could not compile `euphrates_virtual_memory`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "959e3492d38cd9a7fa135f5eb746c9a2ca41221931e71ff207f5f32e91474dda"` [INFO] running `"docker" "rm" "-f" "959e3492d38cd9a7fa135f5eb746c9a2ca41221931e71ff207f5f32e91474dda"` [INFO] [stdout] 959e3492d38cd9a7fa135f5eb746c9a2ca41221931e71ff207f5f32e91474dda