[INFO] cloning repository https://github.com/iwanders/playground-writes-to-protected-page
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/iwanders/playground-writes-to-protected-page" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiwanders%2Fplayground-writes-to-protected-page", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiwanders%2Fplayground-writes-to-protected-page'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8e5e955a1260c65f1c9c02e2c115aa29d9be4797
[INFO] testing iwanders/playground-writes-to-protected-page against 1.99.0-beta.1+cargoflags=--release for beta-release-1.99-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiwanders%2Fplayground-writes-to-protected-page" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/iwanders/playground-writes-to-protected-page
[INFO] finished tweaking git repo https://github.com/iwanders/playground-writes-to-protected-page
[INFO] tweaked toml for git repo https://github.com/iwanders/playground-writes-to-protected-page written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/iwanders/playground-writes-to-protected-page on toolchain 1.99.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/iwanders/playground-writes-to-protected-page already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f
[INFO] running `Command { std: "docker" "start" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.139
[INFO] [stderr]    Compiling track_writes v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::mem::MaybeUninit`
[INFO] [stdout]  --> src/main.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::mem::MaybeUninit;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/main.rs:118:33
[INFO] [stdout]     |
[INFO] [stdout] 118 |                         dest += (displacement[1] as usize * 255);
[INFO] [stdout]     |                                 ^                              ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 118 -                         dest += (displacement[1] as usize * 255);
[INFO] [stdout] 118 +                         dest += displacement[1] as usize * 255;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/main.rs:119:33
[INFO] [stdout]     |
[INFO] [stdout] 119 |                         dest += (displacement[2] as usize * 255 * 255);
[INFO] [stdout]     |                                 ^                                    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 119 -                         dest += (displacement[2] as usize * 255 * 255);
[INFO] [stdout] 119 +                         dest += displacement[2] as usize * 255 * 255;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/main.rs:120:33
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         dest += (displacement[3] as usize * 255 * 255 * 255);
[INFO] [stdout]     |                                 ^                                          ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 120 -                         dest += (displacement[3] as usize * 255 * 255 * 255);
[INFO] [stdout] 120 +                         dest += displacement[3] as usize * 255 * 255 * 255;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut ucontext = std::mem::transmute::<_, *mut libc::ucontext_t>(context);
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sig`
[INFO] [stdout]   --> src/main.rs:10:30
[INFO] [stdout]    |
[INFO] [stdout] 10 | extern "C" fn sigsev_handler(sig: c_int, info: *mut libc::siginfo_t, context: *mut c_void) {
[INFO] [stdout]    |                              ^^^ help: if this is intentional, prefix it with an underscore: `_sig`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/main.rs:186:9
[INFO] [stdout]     |
[INFO] [stdout] 186 |     let r = libc::sigaction(libc::SIGSEGV, &action, std::ptr::null_mut());
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/main.rs:206:9
[INFO] [stdout]     |
[INFO] [stdout] 206 |     let r = libc::mprotect(addr, PAGE_SIZE, libc::PROT_READ | libc::PROT_WRITE);
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/main.rs:215:9
[INFO] [stdout]     |
[INFO] [stdout] 215 |     let r = libc::mprotect(addr, PAGE_SIZE, libc::PROT_READ);
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]   --> src/main.rs:49:13
[INFO] [stdout]    |
[INFO] [stdout] 49 |             std::mem::transmute::<_, *const u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]    = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]    = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]    = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]    = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout]    = note: `#[warn(integer_to_ptr_transmutes)]` on by default
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
[INFO] [stdout]    |
[INFO] [stdout] 49 -             std::mem::transmute::<_, *const u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stdout] 49 +             std::ptr::with_exposed_provenance::<u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:136:18
[INFO] [stdout]     |
[INFO] [stdout] 136 |                 *std::mem::transmute::<_, *mut u8>(dest) = value;
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 136 -                 *std::mem::transmute::<_, *mut u8>(dest) = value;
[INFO] [stdout] 136 +                 *std::ptr::with_exposed_provenance_mut::<u8>(dest) = value;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:156:31
[INFO] [stdout]     |
[INFO] [stdout] 156 |                 let dest_u8 = std::mem::transmute::<_, *mut u8>(dest);
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 156 -                 let dest_u8 = std::mem::transmute::<_, *mut u8>(dest);
[INFO] [stdout] 156 +                 let dest_u8 = std::ptr::with_exposed_provenance_mut::<u8>(dest);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:204:16
[INFO] [stdout]     |
[INFO] [stdout] 204 |     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 204 -     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout] 204 +     let addr = std::ptr::with_exposed_provenance_mut::<c_void>(address);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:213:16
[INFO] [stdout]     |
[INFO] [stdout] 213 |     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 213 -     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout] 213 +     let addr = std::ptr::with_exposed_provenance_mut::<c_void>(address);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1.25s
[INFO] running `Command { std: "docker" "inspect" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling track_writes v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::mem::MaybeUninit`
[INFO] [stdout]  --> src/main.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::mem::MaybeUninit;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/main.rs:118:33
[INFO] [stdout]     |
[INFO] [stdout] 118 |                         dest += (displacement[1] as usize * 255);
[INFO] [stdout]     |                                 ^                              ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 118 -                         dest += (displacement[1] as usize * 255);
[INFO] [stdout] 118 +                         dest += displacement[1] as usize * 255;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/main.rs:119:33
[INFO] [stdout]     |
[INFO] [stdout] 119 |                         dest += (displacement[2] as usize * 255 * 255);
[INFO] [stdout]     |                                 ^                                    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 119 -                         dest += (displacement[2] as usize * 255 * 255);
[INFO] [stdout] 119 +                         dest += displacement[2] as usize * 255 * 255;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/main.rs:120:33
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         dest += (displacement[3] as usize * 255 * 255 * 255);
[INFO] [stdout]     |                                 ^                                          ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 120 -                         dest += (displacement[3] as usize * 255 * 255 * 255);
[INFO] [stdout] 120 +                         dest += displacement[3] as usize * 255 * 255 * 255;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut ucontext = std::mem::transmute::<_, *mut libc::ucontext_t>(context);
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sig`
[INFO] [stdout]   --> src/main.rs:10:30
[INFO] [stdout]    |
[INFO] [stdout] 10 | extern "C" fn sigsev_handler(sig: c_int, info: *mut libc::siginfo_t, context: *mut c_void) {
[INFO] [stdout]    |                              ^^^ help: if this is intentional, prefix it with an underscore: `_sig`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/main.rs:186:9
[INFO] [stdout]     |
[INFO] [stdout] 186 |     let r = libc::sigaction(libc::SIGSEGV, &action, std::ptr::null_mut());
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/main.rs:206:9
[INFO] [stdout]     |
[INFO] [stdout] 206 |     let r = libc::mprotect(addr, PAGE_SIZE, libc::PROT_READ | libc::PROT_WRITE);
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/main.rs:215:9
[INFO] [stdout]     |
[INFO] [stdout] 215 |     let r = libc::mprotect(addr, PAGE_SIZE, libc::PROT_READ);
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]   --> src/main.rs:49:13
[INFO] [stdout]    |
[INFO] [stdout] 49 |             std::mem::transmute::<_, *const u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]    = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]    = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]    = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]    = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout]    = note: `#[warn(integer_to_ptr_transmutes)]` on by default
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
[INFO] [stdout]    |
[INFO] [stdout] 49 -             std::mem::transmute::<_, *const u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stdout] 49 +             std::ptr::with_exposed_provenance::<u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:136:18
[INFO] [stdout]     |
[INFO] [stdout] 136 |                 *std::mem::transmute::<_, *mut u8>(dest) = value;
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 136 -                 *std::mem::transmute::<_, *mut u8>(dest) = value;
[INFO] [stdout] 136 +                 *std::ptr::with_exposed_provenance_mut::<u8>(dest) = value;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:156:31
[INFO] [stdout]     |
[INFO] [stdout] 156 |                 let dest_u8 = std::mem::transmute::<_, *mut u8>(dest);
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 156 -                 let dest_u8 = std::mem::transmute::<_, *mut u8>(dest);
[INFO] [stdout] 156 +                 let dest_u8 = std::ptr::with_exposed_provenance_mut::<u8>(dest);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:204:16
[INFO] [stdout]     |
[INFO] [stdout] 204 |     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 204 -     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout] 204 +     let addr = std::ptr::with_exposed_provenance_mut::<c_void>(address);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stdout]    --> src/main.rs:213:16
[INFO] [stdout]     |
[INFO] [stdout] 213 |     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stdout]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stdout]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stdout]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stdout]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stdout] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stdout]     |
[INFO] [stdout] 213 -     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stdout] 213 +     let addr = std::ptr::with_exposed_provenance_mut::<c_void>(address);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.71s
[INFO] running `Command { std: "docker" "inspect" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `std::mem::MaybeUninit`
[INFO] [stderr]  --> src/main.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use std::mem::MaybeUninit;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around assigned value
[INFO] [stderr]    --> src/main.rs:118:33
[INFO] [stderr]     |
[INFO] [stderr] 118 |                         dest += (displacement[1] as usize * 255);
[INFO] [stderr]     |                                 ^                              ^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 118 -                         dest += (displacement[1] as usize * 255);
[INFO] [stderr] 118 +                         dest += displacement[1] as usize * 255;
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around assigned value
[INFO] [stderr]    --> src/main.rs:119:33
[INFO] [stderr]     |
[INFO] [stderr] 119 |                         dest += (displacement[2] as usize * 255 * 255);
[INFO] [stderr]     |                                 ^                                    ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 119 -                         dest += (displacement[2] as usize * 255 * 255);
[INFO] [stderr] 119 +                         dest += displacement[2] as usize * 255 * 255;
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around assigned value
[INFO] [stderr]    --> src/main.rs:120:33
[INFO] [stderr]     |
[INFO] [stderr] 120 |                         dest += (displacement[3] as usize * 255 * 255 * 255);
[INFO] [stderr]     |                                 ^                                          ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 120 -                         dest += (displacement[3] as usize * 255 * 255 * 255);
[INFO] [stderr] 120 +                         dest += displacement[3] as usize * 255 * 255 * 255;
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/main.rs:29:13
[INFO] [stderr]    |
[INFO] [stderr] 29 |         let mut ucontext = std::mem::transmute::<_, *mut libc::ucontext_t>(context);
[INFO] [stderr]    |             ----^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sig`
[INFO] [stderr]   --> src/main.rs:10:30
[INFO] [stderr]    |
[INFO] [stderr] 10 | extern "C" fn sigsev_handler(sig: c_int, info: *mut libc::siginfo_t, context: *mut c_void) {
[INFO] [stderr]    |                              ^^^ help: if this is intentional, prefix it with an underscore: `_sig`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `r`
[INFO] [stderr]    --> src/main.rs:186:9
[INFO] [stderr]     |
[INFO] [stderr] 186 |     let r = libc::sigaction(libc::SIGSEGV, &action, std::ptr::null_mut());
[INFO] [stderr]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `r`
[INFO] [stderr]    --> src/main.rs:206:9
[INFO] [stderr]     |
[INFO] [stderr] 206 |     let r = libc::mprotect(addr, PAGE_SIZE, libc::PROT_READ | libc::PROT_WRITE);
[INFO] [stderr]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `r`
[INFO] [stderr]    --> src/main.rs:215:9
[INFO] [stderr]     |
[INFO] [stderr] 215 |     let r = libc::mprotect(addr, PAGE_SIZE, libc::PROT_READ);
[INFO] [stderr]     |         ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stderr] 
[INFO] [stderr] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stderr]   --> src/main.rs:49:13
[INFO] [stderr]    |
[INFO] [stderr] 49 |             std::mem::transmute::<_, *const u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stderr]    = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stderr]    = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stderr]    = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stderr]    = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stderr]    = note: `#[warn(integer_to_ptr_transmutes)]` on by default
[INFO] [stderr] help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
[INFO] [stderr]    |
[INFO] [stderr] 49 -             std::mem::transmute::<_, *const u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stderr] 49 +             std::ptr::with_exposed_provenance::<u8>(mcontext.gregs[libc::REG_RIP as usize]);
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stderr]    --> src/main.rs:136:18
[INFO] [stderr]     |
[INFO] [stderr] 136 |                 *std::mem::transmute::<_, *mut u8>(dest) = value;
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stderr]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stderr]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stderr]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stderr]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stderr] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stderr]     |
[INFO] [stderr] 136 -                 *std::mem::transmute::<_, *mut u8>(dest) = value;
[INFO] [stderr] 136 +                 *std::ptr::with_exposed_provenance_mut::<u8>(dest) = value;
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stderr]    --> src/main.rs:156:31
[INFO] [stderr]     |
[INFO] [stderr] 156 |                 let dest_u8 = std::mem::transmute::<_, *mut u8>(dest);
[INFO] [stderr]     |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stderr]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stderr]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stderr]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stderr]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stderr] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stderr]     |
[INFO] [stderr] 156 -                 let dest_u8 = std::mem::transmute::<_, *mut u8>(dest);
[INFO] [stderr] 156 +                 let dest_u8 = std::ptr::with_exposed_provenance_mut::<u8>(dest);
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stderr]    --> src/main.rs:204:16
[INFO] [stderr]     |
[INFO] [stderr] 204 |     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stderr]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stderr]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stderr]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stderr]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stderr]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stderr] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stderr]     |
[INFO] [stderr] 204 -     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stderr] 204 +     let addr = std::ptr::with_exposed_provenance_mut::<c_void>(address);
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: transmuting an integer to a pointer creates a pointer without provenance
[INFO] [stderr]    --> src/main.rs:213:16
[INFO] [stderr]     |
[INFO] [stderr] 213 |     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stderr]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this is dangerous because dereferencing the resulting pointer is undefined behavior
[INFO] [stderr]     = note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
[INFO] [stderr]     = help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
[INFO] [stderr]     = help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
[INFO] [stderr]     = help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
[INFO] [stderr] help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
[INFO] [stderr]     |
[INFO] [stderr] 213 -     let addr = std::mem::transmute::<_, _>(address);
[INFO] [stderr] 213 +     let addr = std::ptr::with_exposed_provenance_mut::<c_void>(address);
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: `track_writes` (bin "track_writes" test) generated 14 warnings (run `cargo fix --bin "track_writes" -p track_writes --tests` to apply 14 suggestions)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.04s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/track_writes-f0bb89f517a9467c)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f", kill_on_drop: false }`
[INFO] [stdout] 22a555268fbe7241b4a998fdf3fdc64325d4bf4e9ad9a395a7432568cd68472f
