[INFO] cloning repository https://github.com/sycamoremoon/oscamp-base-exercise
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sycamoremoon/oscamp-base-exercise" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsycamoremoon%2Foscamp-base-exercise", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsycamoremoon%2Foscamp-base-exercise'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b75dde33b53fb0ea3c3a50247c1e363174f729e8
[INFO] checking sycamoremoon/oscamp-base-exercise against c319ab3d7cf6bd67099fd3635f0e3c0fccb07e40 for pr-160391-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsycamoremoon%2Foscamp-base-exercise" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-0-tc2/source/.cargo/config.toml
[INFO] started tweaking git repo https://github.com/sycamoremoon/oscamp-base-exercise
[INFO] finished tweaking git repo https://github.com/sycamoremoon/oscamp-base-exercise
[INFO] tweaked toml for git repo https://github.com/sycamoremoon/oscamp-base-exercise written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/sycamoremoon/oscamp-base-exercise on toolchain c319ab3d7cf6bd67099fd3635f0e3c0fccb07e40
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c319ab3d7cf6bd67099fd3635f0e3c0fccb07e40" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/sycamoremoon/oscamp-base-exercise 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" "+c319ab3d7cf6bd67099fd3635f0e3c0fccb07e40" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded kqueue-sys v1.0.4
[INFO] [stderr]   Downloaded quote v1.0.44
[INFO] [stderr]   Downloaded filetime v0.2.27
[INFO] [stderr]   Downloaded libredox v0.1.12
[INFO] [stderr]   Downloaded kqueue v1.1.1
[INFO] [stderr]   Downloaded inotify v0.9.6
[INFO] [stderr]   Downloaded notify v6.1.1
[INFO] [stderr]   Downloaded redox_syscall v0.7.2
[INFO] [stderr]   Downloaded socket2 v0.6.2
[INFO] [stderr]   Downloaded libc v0.2.182
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:c0af3998e971868164375a7dfb646c9933ddd1a3bdb00fa2041266763dc1eeab" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925
[INFO] running `Command { std: "docker" "start" "434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925", 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" "434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925" "/opt/rustwide/cargo-home/bin/cargo" "+c319ab3d7cf6bd67099fd3635f0e3c0fccb07e40" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925", 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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925" "/opt/rustwide/cargo-home/bin/cargo" "+c319ab3d7cf6bd67099fd3635f0e3c0fccb07e40" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]     Checking hashbrown v0.16.1
[INFO] [stderr]     Checking bitflags v2.11.0
[INFO] [stderr]     Checking bump_allocator v0.1.0 (/opt/rustwide/workdir/exercises/02_no_std_dev/02_bump_allocator)
[INFO] [stderr]     Checking tlb_sim v0.1.0 (/opt/rustwide/workdir/exercises/06_page_table/04_tlb_sim)
[INFO] [stderr]     Checking atomic_counter v0.1.0 (/opt/rustwide/workdir/exercises/03_os_concurrency/01_atomic_counter)
[INFO] [stderr]     Checking channel v0.1.0 (/opt/rustwide/workdir/exercises/01_concurrency_sync/03_channel)
[INFO] [stderr]     Checking fd_table v0.1.0 (/opt/rustwide/workdir/exercises/02_no_std_dev/05_fd_table)
[INFO] [stderr]     Checking free_list_allocator v0.1.0 (/opt/rustwide/workdir/exercises/02_no_std_dev/03_free_list_allocator)
[INFO] [stderr]     Checking page_table_walk v0.1.0 (/opt/rustwide/workdir/exercises/06_page_table/02_page_table_walk)
[INFO] [stderr]     Checking green_threads v0.1.0 (/opt/rustwide/workdir/exercises/04_context_switch/02_green_threads)
[INFO] [stderr]     Checking mem_primitives v0.1.0 (/opt/rustwide/workdir/exercises/02_no_std_dev/01_mem_primitives)
[INFO] [stderr]     Checking process_pipe v0.1.0 (/opt/rustwide/workdir/exercises/01_concurrency_sync/04_process_pipe)
[INFO] [stderr]     Checking multi_level_pt v0.1.0 (/opt/rustwide/workdir/exercises/06_page_table/03_multi_level_pt)
[INFO] [stdout] warning: unused import: `core::ptr::null_mut`
[INFO] [stdout]   --> exercises/02_no_std_dev/02_bump_allocator/src/lib.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use core::ptr::null_mut;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:11:36
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::sync::atomic::{AtomicU64, Ordering};
[INFO] [stdout]    |                                    ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/04_tlb_sim/src/lib.rs:90:30
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub fn lookup(&mut self, vpn: u64, asid: u16) -> Option<u64> {
[INFO] [stdout]    |                              ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asid`
[INFO] [stdout]   --> exercises/06_page_table/04_tlb_sim/src/lib.rs:90:40
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub fn lookup(&mut self, vpn: u64, asid: u16) -> Option<u64> {
[INFO] [stdout]    |                                        ^^^^ help: if this is intentional, prefix it with an underscore: `_asid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:30
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:40
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asid`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:50
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                                                  ^^^^ help: if this is intentional, prefix it with an underscore: `_asid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:61
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                                                             ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:125:36
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn flush_by_vpn(&mut self, vpn: u64) {
[INFO] [stdout]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asid`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:133:37
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub fn flush_by_asid(&mut self, asid: u16) {
[INFO] [stdout]     |                                     ^^^^ help: if this is intentional, prefix it with an underscore: `_asid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:195:33
[INFO] [stdout]     |
[INFO] [stdout] 195 |     pub fn translate(&mut self, vpn: u64) -> Option<u64> {
[INFO] [stdout]     |                                 ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entries`, `capacity`, and `fifo_ptr` are never read
[INFO] [stdout]   --> exercises/06_page_table/04_tlb_sim/src/lib.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct Tlb {
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 63 |     entries: Vec<TlbEntry>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 64 |     capacity: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 65 |     /// FIFO 指针：下次替换的位置
[INFO] [stdout] 66 |     fifo_ptr: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `layout`
[INFO] [stdout]   --> exercises/02_no_std_dev/02_bump_allocator/src/lib.rs:65:28
[INFO] [stdout]    |
[INFO] [stdout] 65 |     unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
[INFO] [stdout]    |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_layout`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `items`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:16:25
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn simple_send_recv(items: Vec<String>) -> Vec<String> {
[INFO] [stdout]    |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_items`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_producers`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:28:23
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn multi_producer(n_producers: usize) -> Vec<String> {
[INFO] [stdout]    |                       ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_producers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `heap_end` is never read
[INFO] [stdout]   --> exercises/02_no_std_dev/02_bump_allocator/src/lib.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct BumpAllocator {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 39 |     heap_start: usize,
[INFO] [stdout] 40 |     heap_end: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking pte_flags v0.1.0 (/opt/rustwide/workdir/exercises/06_page_table/01_pte_flags)
[INFO] [stdout] warning: unused variable: `size`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:108:13
[INFO] [stdout]     |
[INFO] [stdout] 108 |         let size = layout.size().max(core::mem::size_of::<FreeBlock>());
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_size`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file`
[INFO] [stdout]   --> exercises/02_no_std_dev/05_fd_table/src/lib.rs:66:29
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn alloc(&mut self, file: Arc<dyn File>) -> usize {
[INFO] [stdout]    |                             ^^^^ help: if this is intentional, prefix it with an underscore: `_file`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]   --> exercises/02_no_std_dev/05_fd_table/src/lib.rs:72:23
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn get(&self, fd: usize) -> Option<Arc<dyn File>> {
[INFO] [stdout]    |                       ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]   --> exercises/02_no_std_dev/05_fd_table/src/lib.rs:78:29
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub fn close(&mut self, fd: usize) -> bool {
[INFO] [stdout]    |                             ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `align`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let align = layout.align().max(core::mem::align_of::<FreeBlock>());
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_align`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ptr`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:125:30
[INFO] [stdout]     |
[INFO] [stdout] 125 |     unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_ptr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `size`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:126:13
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let size = layout.size().max(core::mem::size_of::<FreeBlock>());
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `size` and `next` are never read
[INFO] [stdout]   --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | struct FreeBlock {
[INFO] [stdout]    |        --------- fields in this struct
[INFO] [stdout] 44 |     size: usize,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 45 |     next: *mut FreeBlock,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `expected`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:49:36
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn compare_and_swap(&self, expected: u64, new_val: u64) -> Result<u64, u64> {
[INFO] [stdout]    |                                    ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_expected`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_val`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:49:51
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn compare_and_swap(&self, expected: u64, new_val: u64) -> Result<u64, u64> {
[INFO] [stdout]    |                                                   ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `multiplier`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:58:34
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub fn fetch_multiply(&self, multiplier: u64) -> u64 {
[INFO] [stdout]    |                                  ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_multiplier`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `heap_start`, `heap_end`, `bump_next`, and `free_list` are never read
[INFO] [stdout]   --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct FreeListAllocator {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 49 |     heap_start: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 50 |     heap_end: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 51 |     /// Bump pointer: unallocated region starts here
[INFO] [stdout] 52 |     bump_next: core::sync::atomic::AtomicUsize,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     free_list: std::sync::Mutex<*mut FreeBlock>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking rwlock v0.1.0 (/opt/rustwide/workdir/exercises/03_os_concurrency/05_rwlock)
[INFO] [stdout] warning: methods `free_list_head` and `set_free_list_head` are never used
[INFO] [stdout]   --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:85:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | impl FreeListAllocator {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85 |     fn free_list_head(&self) -> *mut FreeBlock {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     fn set_free_list_head(&self, head: *mut FreeBlock) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Read` and `Write`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 | use std::io::{self, Read, Write};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Command` and `Stdio`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:35:20
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::process::{Command, Stdio};
[INFO] [stdout]    |                    ^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking mutex_counter v0.1.0 (/opt/rustwide/workdir/exercises/01_concurrency_sync/02_mutex_counter)
[INFO] [stderr]     Checking atomic_ordering v0.1.0 (/opt/rustwide/workdir/exercises/03_os_concurrency/02_atomic_ordering)
[INFO] [stdout] warning: field `value` is never read
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AtomicCounter {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 14 |     value: AtomicU64,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `program`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:51:20
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn run_command(program: &str, args: &[&str]) -> String {
[INFO] [stdout]    |                    ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_program`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:51:35
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn run_command(program: &str, args: &[&str]) -> String {
[INFO] [stdout]    |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `input`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:86:25
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub fn pipe_through_cat(input: &str) -> String {
[INFO] [stdout]    |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `command`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:109:22
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub fn get_exit_code(command: &str) -> i32 {
[INFO] [stdout]     |                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_command`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking stack_coroutine v0.1.0 (/opt/rustwide/workdir/exercises/04_context_switch/01_stack_coroutine)
[INFO] [stdout] warning: unused variable: `program`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:135:32
[INFO] [stdout]     |
[INFO] [stdout] 135 | pub fn run_command_with_result(program: &str, args: &[&str]) -> io::Result<String> {
[INFO] [stdout]     |                                ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_program`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:135:47
[INFO] [stdout]     |
[INFO] [stdout] 135 | pub fn run_command_with_result(program: &str, args: &[&str]) -> io::Result<String> {
[INFO] [stdout]     |                                               ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pattern`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:163:26
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn pipe_through_grep(pattern: &str, input: &str) -> String {
[INFO] [stdout]     |                          ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pattern`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `input`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:163:41
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn pipe_through_grep(pattern: &str, input: &str) -> String {
[INFO] [stdout]     |                                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking spinlock v0.1.0 (/opt/rustwide/workdir/exercises/03_os_concurrency/03_spinlock)
[INFO] [stderr]     Checking basic_future v0.1.0 (/opt/rustwide/workdir/exercises/05_async_programming/01_basic_future)
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:66:27
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn map(&mut self, vpn: usize, ppn: u32, flags: u8) {
[INFO] [stdout]    |                           ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:66:39
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn map(&mut self, vpn: usize, ppn: u32, flags: u8) {
[INFO] [stdout]    |                                       ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:66:49
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn map(&mut self, vpn: usize, ppn: u32, flags: u8) {
[INFO] [stdout]    |                                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:72:29
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn unmap(&mut self, vpn: usize) {
[INFO] [stdout]    |                             ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:78:26
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub fn lookup(&self, vpn: usize) -> Option<&PageTableEntry> {
[INFO] [stdout]    |                          ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:91:29
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub fn translate(&self, va: u32, is_write: bool) -> TranslateResult {
[INFO] [stdout]    |                             ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_write`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:91:38
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub fn translate(&self, va: u32, is_write: bool) -> TranslateResult {
[INFO] [stdout]    |                                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_write`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:103:18
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub fn va_to_vpn(va: u32) -> usize {
[INFO] [stdout]     |                  ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:111:21
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn va_to_offset(va: u32) -> u32 {
[INFO] [stdout]     |                     ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:117:16
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn make_pa(ppn: u32, offset: u32) -> u32 {
[INFO] [stdout]     |                ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `offset`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:117:26
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn make_pa(ppn: u32, offset: u32) -> u32 {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking syscall_wrapper v0.1.0 (/opt/rustwide/workdir/exercises/02_no_std_dev/04_syscall_wrapper)
[INFO] [stderr]     Checking spinlock_guard v0.1.0 (/opt/rustwide/workdir/exercises/03_os_concurrency/04_spinlock_guard)
[INFO] [stdout] warning: field `entries` is never read
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct SingleLevelPageTable {
[INFO] [stdout]    |            -------------------- field in this struct
[INFO] [stdout] 52 |     entries: Vec<Option<PageTableEntry>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:10:17
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:31:36
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::sync::atomic::{AtomicU32, Ordering};
[INFO] [stdout]    |                                    ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:104:24
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn extract_vpn(va: u64, level: usize) -> usize {
[INFO] [stdout]     |                        ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `level`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:104:33
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn extract_vpn(va: u64, level: usize) -> usize {
[INFO] [stdout]     |                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_level`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:115:32
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn map_page(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pa`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:115:41
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn map_page(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                         ^^ help: if this is intentional, prefix it with an underscore: `_pa`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> exercises/03_os_concurrency/02_atomic_ordering/src/lib.rs:40:27
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub fn produce(&self, value: u32) {
[INFO] [stdout]    |                           ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:115:50
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn map_page(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:135:29
[INFO] [stdout]     |
[INFO] [stdout] 135 |     pub fn translate(&self, va: u64) -> TranslateResult {
[INFO] [stdout]     |                             ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> exercises/03_os_concurrency/02_atomic_ordering/src/lib.rs:83:24
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pub fn init(&self, val: u32) -> bool {
[INFO] [stdout]    |                        ^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `initialized` and `value` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/02_atomic_ordering/src/lib.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct OnceCell {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 67 |     initialized: AtomicBool,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 68 |     value: AtomicU32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:152:55
[INFO] [stdout]     |
[INFO] [stdout] 152 |     pub fn map_superpage(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                                       ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PPN_SHIFT` is never used
[INFO] [stdout]   --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const PPN_SHIFT: u32 = 10;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_ppn` is never read
[INFO] [stdout]   --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct Sv39PageTable {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 68 |     next_ppn: u64,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `alloc_node` is never used
[INFO] [stdout]   --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:90:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl Sv39PageTable {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 90 |     fn alloc_node(&mut self) -> u64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:59:17
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn make_pte(ppn: u64, flags: u64) -> u64 {
[INFO] [stdout]    |                 ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:59:27
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn make_pte(ppn: u64, flags: u64) -> u64 {
[INFO] [stdout]    |                           ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:67:20
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn extract_ppn(pte: u64) -> u64 {
[INFO] [stdout]    |                    ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:73:22
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub fn extract_flags(pte: u64) -> u64 {
[INFO] [stdout]    |                      ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:79:17
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub fn is_valid(pte: u64) -> bool {
[INFO] [stdout]    |                 ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:88:16
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub fn is_leaf(pte: u64) -> bool {
[INFO] [stdout]    |                ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:25
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                         ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `read`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:35
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_read`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `write`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:47
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_write`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `execute`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:60
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_execute`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking thread_spawn v0.1.0 (/opt/rustwide/workdir/exercises/01_concurrency_sync/01_thread_spawn)
[INFO] [stdout] warning: unused variable: `n_threads`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:18:27
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn concurrent_counter(n_threads: usize, count_per_thread: usize) -> usize {
[INFO] [stdout]    |                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_threads`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `count_per_thread`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:18:45
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn concurrent_counter(n_threads: usize, count_per_thread: usize) -> usize {
[INFO] [stdout]    |                                             ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_count_per_thread`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_threads`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:31:27
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub fn concurrent_collect(n_threads: usize) -> Vec<usize> {
[INFO] [stdout]    |                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_threads`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PPN_SHIFT` is never used
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const PPN_SHIFT: u32 = 10;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PPN_MASK` is never used
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:49:7
[INFO] [stdout]    |
[INFO] [stdout] 49 | const PPN_MASK: u64 = (1u64 << 44) - 1; // 44-bit PPN
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cx`
[INFO] [stdout]   --> exercises/05_async_programming/01_basic_future/src/lib.rs:35:35
[INFO] [stdout]    |
[INFO] [stdout] 35 |     fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
[INFO] [stdout]    |                                   ^^ help: if this is intentional, prefix it with an underscore: `_cx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cx`
[INFO] [stdout]   --> exercises/05_async_programming/01_basic_future/src/lib.rs:59:35
[INFO] [stdout]    |
[INFO] [stdout] 59 |     fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
[INFO] [stdout]    |                                   ^^ help: if this is intentional, prefix it with an underscore: `_cx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `yielded` is never read
[INFO] [stdout]   --> exercises/05_async_programming/01_basic_future/src/lib.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct YieldOnce {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 43 |     yielded: bool,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/03_spinlock/src/lib.rs:13:37
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::sync::atomic::{AtomicBool, Ordering};
[INFO] [stdout]    |                                     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/04_spinlock_guard/src/lib.rs:14:37
[INFO] [stdout]    |
[INFO] [stdout] 14 | use std::sync::atomic::{AtomicBool, Ordering};
[INFO] [stdout]    |                                     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `core::ptr::null_mut`
[INFO] [stdout]   --> exercises/02_no_std_dev/02_bump_allocator/src/lib.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use core::ptr::null_mut;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `READER_MASK` is never used
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const READER_MASK: u32 = (1 << 30) - 1;
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WRITER_HOLDING` is never used
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const WRITER_HOLDING: u32 = 1 << 30;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WRITER_WAITING` is never used
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const WRITER_WAITING: u32 = 1 << 31;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `layout`
[INFO] [stdout]   --> exercises/02_no_std_dev/02_bump_allocator/src/lib.rs:65:28
[INFO] [stdout]    |
[INFO] [stdout] 65 |     unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
[INFO] [stdout]    |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_layout`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `heap_end` is never read
[INFO] [stdout]   --> exercises/02_no_std_dev/02_bump_allocator/src/lib.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct BumpAllocator {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 39 |     heap_start: usize,
[INFO] [stdout] 40 |     heap_end: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `state` and `data` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct RwLock<T> {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 42 |     state: AtomicU32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 43 |     data: UnsafeCell<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `lock` is never read
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct RwLockReadGuard<'a, T> {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 84 |     lock: &'a RwLock<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `lock` is never read
[INFO] [stdout]    --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub struct RwLockWriteGuard<'a, T> {
[INFO] [stdout]     |            ---------------- field in this struct
[INFO] [stdout] 107 |     lock: &'a RwLock<T>,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:11:36
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::sync::atomic::{AtomicU64, Ordering};
[INFO] [stdout]    |                                    ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `items`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:16:25
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn simple_send_recv(items: Vec<String>) -> Vec<String> {
[INFO] [stdout]    |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_items`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_producers`
[INFO] [stdout]   --> exercises/01_concurrency_sync/03_channel/src/lib.rs:28:23
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn multi_producer(n_producers: usize) -> Vec<String> {
[INFO] [stdout]    |                       ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_producers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `locked` and `data` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/03_spinlock/src/lib.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SpinLock<T> {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 17 |     locked: AtomicBool,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 18 |     data: UnsafeCell<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:24
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                        ^^ help: if this is intentional, prefix it with an underscore: `_id`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arg0`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:35
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_arg0`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arg1`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:48
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                                                ^^^^ help: if this is intentional, prefix it with an underscore: `_arg1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arg2`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:61
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                                                             ^^^^ help: if this is intentional, prefix it with an underscore: `_arg2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:141:18
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn sys_write(fd: usize, buf: &[u8]) -> isize {
[INFO] [stdout]     |                  ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buf`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:141:29
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn sys_write(fd: usize, buf: &[u8]) -> isize {
[INFO] [stdout]     |                             ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:147:17
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn sys_read(fd: usize, buf: &mut [u8]) -> isize {
[INFO] [stdout]     |                 ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buf`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:147:28
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn sys_read(fd: usize, buf: &mut [u8]) -> isize {
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:153:18
[INFO] [stdout]     |
[INFO] [stdout] 153 | pub fn sys_close(fd: usize) -> isize {
[INFO] [stdout]     |                  ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `code`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:159:17
[INFO] [stdout]     |
[INFO] [stdout] 159 | pub fn sys_exit(code: i32) -> ! {
[INFO] [stdout]     |                 ^^^^ help: if this is intentional, prefix it with an underscore: `_code`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `expected`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:49:36
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn compare_and_swap(&self, expected: u64, new_val: u64) -> Result<u64, u64> {
[INFO] [stdout]    |                                    ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_expected`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_val`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:49:51
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn compare_and_swap(&self, expected: u64, new_val: u64) -> Result<u64, u64> {
[INFO] [stdout]    |                                                   ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `multiplier`
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:58:34
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub fn fetch_multiply(&self, multiplier: u64) -> u64 {
[INFO] [stdout]    |                                  ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_multiplier`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `value` is never read
[INFO] [stdout]   --> exercises/03_os_concurrency/01_atomic_counter/src/lib.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AtomicCounter {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 14 |     value: AtomicU64,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_WRITE` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:113:7
[INFO] [stdout]     |
[INFO] [stdout] 113 | const NATIVE_SYS_WRITE: usize = 1;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_READ` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:115:7
[INFO] [stdout]     |
[INFO] [stdout] 115 | const NATIVE_SYS_READ: usize = 0;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_CLOSE` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:117:7
[INFO] [stdout]     |
[INFO] [stdout] 117 | const NATIVE_SYS_CLOSE: usize = 3;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_EXIT` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:119:7
[INFO] [stdout]     |
[INFO] [stdout] 119 | const NATIVE_SYS_EXIT: usize = 60;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `locked` and `data` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/04_spinlock_guard/src/lib.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SpinLock<T> {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 17 |     locked: AtomicBool,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 18 |     data: UnsafeCell<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `lock` is never read
[INFO] [stdout]   --> exercises/03_os_concurrency/04_spinlock_guard/src/lib.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct SpinGuard<'a, T> {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 27 |     lock: &'a SpinLock<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file`
[INFO] [stdout]   --> exercises/02_no_std_dev/05_fd_table/src/lib.rs:66:29
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn alloc(&mut self, file: Arc<dyn File>) -> usize {
[INFO] [stdout]    |                             ^^^^ help: if this is intentional, prefix it with an underscore: `_file`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]   --> exercises/02_no_std_dev/05_fd_table/src/lib.rs:72:23
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn get(&self, fd: usize) -> Option<Arc<dyn File>> {
[INFO] [stdout]    |                       ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]   --> exercises/02_no_std_dev/05_fd_table/src/lib.rs:78:29
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub fn close(&mut self, fd: usize) -> bool {
[INFO] [stdout]    |                             ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `size`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:108:13
[INFO] [stdout]     |
[INFO] [stdout] 108 |         let size = layout.size().max(core::mem::size_of::<FreeBlock>());
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_size`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Read` and `Write`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 | use std::io::{self, Read, Write};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Command` and `Stdio`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:35:20
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::process::{Command, Stdio};
[INFO] [stdout]    |                    ^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `align`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let align = layout.align().max(core::mem::align_of::<FreeBlock>());
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_align`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ptr`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:125:30
[INFO] [stdout]     |
[INFO] [stdout] 125 |     unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_ptr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `size`
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:126:13
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let size = layout.size().max(core::mem::size_of::<FreeBlock>());
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `size` and `next` are never read
[INFO] [stdout]   --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | struct FreeBlock {
[INFO] [stdout]    |        --------- fields in this struct
[INFO] [stdout] 44 |     size: usize,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 45 |     next: *mut FreeBlock,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `heap_start`, `heap_end`, `bump_next`, and `free_list` are never read
[INFO] [stdout]   --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct FreeListAllocator {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 49 |     heap_start: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 50 |     heap_end: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 51 |     /// Bump pointer: unallocated region starts here
[INFO] [stdout] 52 |     bump_next: core::sync::atomic::AtomicUsize,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     free_list: core::cell::UnsafeCell<*mut FreeBlock>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `free_list_head` and `set_free_list_head` are never used
[INFO] [stdout]    --> exercises/02_no_std_dev/03_free_list_allocator/src/lib.rs:95:8
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl FreeListAllocator {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  95 |     fn free_list_head(&self) -> *mut FreeBlock {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     fn set_free_list_head(&self, head: *mut FreeBlock) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `program`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:51:20
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn run_command(program: &str, args: &[&str]) -> String {
[INFO] [stdout]    |                    ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_program`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:51:35
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn run_command(program: &str, args: &[&str]) -> String {
[INFO] [stdout]    |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `input`
[INFO] [stdout]   --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:86:25
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub fn pipe_through_cat(input: &str) -> String {
[INFO] [stdout]    |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `command`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:109:22
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub fn get_exit_code(command: &str) -> i32 {
[INFO] [stdout]     |                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_command`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `program`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:135:32
[INFO] [stdout]     |
[INFO] [stdout] 135 | pub fn run_command_with_result(program: &str, args: &[&str]) -> io::Result<String> {
[INFO] [stdout]     |                                ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_program`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:135:47
[INFO] [stdout]     |
[INFO] [stdout] 135 | pub fn run_command_with_result(program: &str, args: &[&str]) -> io::Result<String> {
[INFO] [stdout]     |                                               ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pattern`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:163:26
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn pipe_through_grep(pattern: &str, input: &str) -> String {
[INFO] [stdout]     |                          ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pattern`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `input`
[INFO] [stdout]    --> exercises/01_concurrency_sync/04_process_pipe/src/lib.rs:163:41
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn pipe_through_grep(pattern: &str, input: &str) -> String {
[INFO] [stdout]     |                                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/04_tlb_sim/src/lib.rs:90:30
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub fn lookup(&mut self, vpn: u64, asid: u16) -> Option<u64> {
[INFO] [stdout]    |                              ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asid`
[INFO] [stdout]   --> exercises/06_page_table/04_tlb_sim/src/lib.rs:90:40
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub fn lookup(&mut self, vpn: u64, asid: u16) -> Option<u64> {
[INFO] [stdout]    |                                        ^^^^ help: if this is intentional, prefix it with an underscore: `_asid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:30
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:40
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asid`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:50
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                                                  ^^^^ help: if this is intentional, prefix it with an underscore: `_asid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:103:61
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn insert(&mut self, vpn: u64, ppn: u64, asid: u16, flags: u64) {
[INFO] [stdout]     |                                                             ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:125:36
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn flush_by_vpn(&mut self, vpn: u64) {
[INFO] [stdout]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asid`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:133:37
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub fn flush_by_asid(&mut self, asid: u16) {
[INFO] [stdout]     |                                     ^^^^ help: if this is intentional, prefix it with an underscore: `_asid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:66:27
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn map(&mut self, vpn: usize, ppn: u32, flags: u8) {
[INFO] [stdout]    |                           ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:66:39
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn map(&mut self, vpn: usize, ppn: u32, flags: u8) {
[INFO] [stdout]    |                                       ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:66:49
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn map(&mut self, vpn: usize, ppn: u32, flags: u8) {
[INFO] [stdout]    |                                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:72:29
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn unmap(&mut self, vpn: usize) {
[INFO] [stdout]    |                             ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:78:26
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub fn lookup(&self, vpn: usize) -> Option<&PageTableEntry> {
[INFO] [stdout]    |                          ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:91:29
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub fn translate(&self, va: u32, is_write: bool) -> TranslateResult {
[INFO] [stdout]    |                             ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_write`
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:91:38
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub fn translate(&self, va: u32, is_write: bool) -> TranslateResult {
[INFO] [stdout]    |                                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_write`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:103:18
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub fn va_to_vpn(va: u32) -> usize {
[INFO] [stdout]     |                  ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vpn`
[INFO] [stdout]    --> exercises/06_page_table/04_tlb_sim/src/lib.rs:195:33
[INFO] [stdout]     |
[INFO] [stdout] 195 |     pub fn translate(&mut self, vpn: u64) -> Option<u64> {
[INFO] [stdout]     |                                 ^^^ help: if this is intentional, prefix it with an underscore: `_vpn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:111:21
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn va_to_offset(va: u32) -> u32 {
[INFO] [stdout]     |                     ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:117:16
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn make_pa(ppn: u32, offset: u32) -> u32 {
[INFO] [stdout]     |                ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `offset`
[INFO] [stdout]    --> exercises/06_page_table/02_page_table_walk/src/lib.rs:117:26
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn make_pa(ppn: u32, offset: u32) -> u32 {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entries` is never read
[INFO] [stdout]   --> exercises/06_page_table/02_page_table_walk/src/lib.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct SingleLevelPageTable {
[INFO] [stdout]    |            -------------------- field in this struct
[INFO] [stdout] 52 |     entries: Vec<Option<PageTableEntry>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:10:17
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_threads`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:18:27
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn concurrent_counter(n_threads: usize, count_per_thread: usize) -> usize {
[INFO] [stdout]    |                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_threads`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `count_per_thread`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:18:45
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn concurrent_counter(n_threads: usize, count_per_thread: usize) -> usize {
[INFO] [stdout]    |                                             ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_count_per_thread`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_threads`
[INFO] [stdout]   --> exercises/01_concurrency_sync/02_mutex_counter/src/lib.rs:31:27
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub fn concurrent_collect(n_threads: usize) -> Vec<usize> {
[INFO] [stdout]    |                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_threads`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ppn`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:59:17
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn make_pte(ppn: u64, flags: u64) -> u64 {
[INFO] [stdout]    |                 ^^^ help: if this is intentional, prefix it with an underscore: `_ppn`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:59:27
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn make_pte(ppn: u64, flags: u64) -> u64 {
[INFO] [stdout]    |                           ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:67:20
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn extract_ppn(pte: u64) -> u64 {
[INFO] [stdout]    |                    ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:73:22
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub fn extract_flags(pte: u64) -> u64 {
[INFO] [stdout]    |                      ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:79:17
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub fn is_valid(pte: u64) -> bool {
[INFO] [stdout]    |                 ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:88:16
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub fn is_leaf(pte: u64) -> bool {
[INFO] [stdout]    |                ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:31:36
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::sync::atomic::{AtomicU32, Ordering};
[INFO] [stdout]    |                                    ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pte`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:25
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                         ^^^ help: if this is intentional, prefix it with an underscore: `_pte`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `read`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:35
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_read`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `write`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:47
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_write`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `execute`
[INFO] [stdout]    --> exercises/06_page_table/01_pte_flags/src/lib.rs:100:60
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn check_permission(pte: u64, read: bool, write: bool, execute: bool) -> bool {
[INFO] [stdout]     |                                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_execute`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entries`, `capacity`, and `fifo_ptr` are never read
[INFO] [stdout]   --> exercises/06_page_table/04_tlb_sim/src/lib.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct Tlb {
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 63 |     entries: Vec<TlbEntry>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 64 |     capacity: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 65 |     /// FIFO 指针：下次替换的位置
[INFO] [stdout] 66 |     fifo_ptr: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PPN_SHIFT` is never used
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const PPN_SHIFT: u32 = 10;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PPN_MASK` is never used
[INFO] [stdout]   --> exercises/06_page_table/01_pte_flags/src/lib.rs:49:7
[INFO] [stdout]    |
[INFO] [stdout] 49 | const PPN_MASK: u64 = (1u64 << 44) - 1; // 44-bit PPN
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:104:24
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn extract_vpn(va: u64, level: usize) -> usize {
[INFO] [stdout]     |                        ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `level`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:104:33
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn extract_vpn(va: u64, level: usize) -> usize {
[INFO] [stdout]     |                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_level`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:115:32
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn map_page(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pa`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:115:41
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn map_page(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                         ^^ help: if this is intentional, prefix it with an underscore: `_pa`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:115:50
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn map_page(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `va`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:135:29
[INFO] [stdout]     |
[INFO] [stdout] 135 |     pub fn translate(&self, va: u64) -> TranslateResult {
[INFO] [stdout]     |                             ^^ help: if this is intentional, prefix it with an underscore: `_va`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flags`
[INFO] [stdout]    --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:152:55
[INFO] [stdout]     |
[INFO] [stdout] 152 |     pub fn map_superpage(&mut self, va: u64, pa: u64, flags: u64) {
[INFO] [stdout]     |                                                       ^^^^^ help: if this is intentional, prefix it with an underscore: `_flags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PPN_SHIFT` is never used
[INFO] [stdout]   --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const PPN_SHIFT: u32 = 10;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_ppn` is never read
[INFO] [stdout]   --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct Sv39PageTable {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 68 |     next_ppn: u64,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `alloc_node` is never used
[INFO] [stdout]   --> exercises/06_page_table/03_multi_level_pt/src/lib.rs:90:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl Sv39PageTable {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 90 |     fn alloc_node(&mut self) -> u64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/04_spinlock_guard/src/lib.rs:14:37
[INFO] [stdout]    |
[INFO] [stdout] 14 | use std::sync::atomic::{AtomicBool, Ordering};
[INFO] [stdout]    |                                     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `READER_MASK` is never used
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const READER_MASK: u32 = (1 << 30) - 1;
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WRITER_HOLDING` is never used
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const WRITER_HOLDING: u32 = 1 << 30;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WRITER_WAITING` is never used
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const WRITER_WAITING: u32 = 1 << 31;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `state` and `data` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct RwLock<T> {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 42 |     state: AtomicU32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 43 |     data: UnsafeCell<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `lock` is never read
[INFO] [stdout]   --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct RwLockReadGuard<'a, T> {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 84 |     lock: &'a RwLock<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `lock` is never read
[INFO] [stdout]    --> exercises/03_os_concurrency/05_rwlock/src/lib.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub struct RwLockWriteGuard<'a, T> {
[INFO] [stdout]     |            ---------------- field in this struct
[INFO] [stdout] 107 |     lock: &'a RwLock<T>,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ordering`
[INFO] [stdout]   --> exercises/03_os_concurrency/03_spinlock/src/lib.rs:13:37
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::sync::atomic::{AtomicBool, Ordering};
[INFO] [stdout]    |                                     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `locked` and `data` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/04_spinlock_guard/src/lib.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SpinLock<T> {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 17 |     locked: AtomicBool,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 18 |     data: UnsafeCell<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `lock` is never read
[INFO] [stdout]   --> exercises/03_os_concurrency/04_spinlock_guard/src/lib.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct SpinGuard<'a, T> {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 27 |     lock: &'a SpinLock<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `locked` and `data` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/03_spinlock/src/lib.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SpinLock<T> {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 17 |     locked: AtomicBool,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 18 |     data: UnsafeCell<T>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:24
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                        ^^ help: if this is intentional, prefix it with an underscore: `_id`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arg0`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:35
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_arg0`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arg1`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:48
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                                                ^^^^ help: if this is intentional, prefix it with an underscore: `_arg1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arg2`
[INFO] [stdout]   --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:84:61
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub unsafe fn syscall3(id: usize, arg0: usize, arg1: usize, arg2: usize) -> isize {
[INFO] [stdout]    |                                                             ^^^^ help: if this is intentional, prefix it with an underscore: `_arg2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:141:18
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn sys_write(fd: usize, buf: &[u8]) -> isize {
[INFO] [stdout]     |                  ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buf`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:141:29
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn sys_write(fd: usize, buf: &[u8]) -> isize {
[INFO] [stdout]     |                             ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:147:17
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn sys_read(fd: usize, buf: &mut [u8]) -> isize {
[INFO] [stdout]     |                 ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buf`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:147:28
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn sys_read(fd: usize, buf: &mut [u8]) -> isize {
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fd`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:153:18
[INFO] [stdout]     |
[INFO] [stdout] 153 | pub fn sys_close(fd: usize) -> isize {
[INFO] [stdout]     |                  ^^ help: if this is intentional, prefix it with an underscore: `_fd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `code`
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:159:17
[INFO] [stdout]     |
[INFO] [stdout] 159 | pub fn sys_exit(code: i32) -> ! {
[INFO] [stdout]     |                 ^^^^ help: if this is intentional, prefix it with an underscore: `_code`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_WRITE` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:113:7
[INFO] [stdout]     |
[INFO] [stdout] 113 | const NATIVE_SYS_WRITE: usize = 1;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_READ` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:115:7
[INFO] [stdout]     |
[INFO] [stdout] 115 | const NATIVE_SYS_READ: usize = 0;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_CLOSE` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:117:7
[INFO] [stdout]     |
[INFO] [stdout] 117 | const NATIVE_SYS_CLOSE: usize = 3;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NATIVE_SYS_EXIT` is never used
[INFO] [stdout]    --> exercises/02_no_std_dev/04_syscall_wrapper/src/lib.rs:119:7
[INFO] [stdout]     |
[INFO] [stdout] 119 | const NATIVE_SYS_EXIT: usize = 60;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> exercises/03_os_concurrency/02_atomic_ordering/src/lib.rs:40:27
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub fn produce(&self, value: u32) {
[INFO] [stdout]    |                           ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> exercises/03_os_concurrency/02_atomic_ordering/src/lib.rs:83:24
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pub fn init(&self, val: u32) -> bool {
[INFO] [stdout]    |                        ^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `initialized` and `value` are never read
[INFO] [stdout]   --> exercises/03_os_concurrency/02_atomic_ordering/src/lib.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct OnceCell {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 67 |     initialized: AtomicBool,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 68 |     value: AtomicU32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking indexmap v2.13.0
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking socket2 v0.6.2
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking inotify-sys v0.1.5
[INFO] [stderr]     Checking filetime v0.2.27
[INFO] [stderr]     Checking inotify v0.9.6
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking notify v6.1.1
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking crossterm v0.27.0
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]     Checking tokio v1.49.0
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking oscamp-cli v0.1.0 (/opt/rustwide/workdir/cli)
[INFO] [stderr]     Checking tokio_tasks v0.1.0 (/opt/rustwide/workdir/exercises/05_async_programming/02_tokio_tasks)
[INFO] [stderr]     Checking async_channel_ex v0.1.0 (/opt/rustwide/workdir/exercises/05_async_programming/03_async_channel)
[INFO] [stderr]     Checking select_timeout v0.1.0 (/opt/rustwide/workdir/exercises/05_async_programming/04_select_timeout)
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> exercises/05_async_programming/03_async_channel/src/lib.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> exercises/05_async_programming/03_async_channel/src/lib.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `sleep`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:11:19
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tokio::time::{sleep, Duration};
[INFO] [stdout]    |                   ^^^^^  ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `future`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:18:33
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub async fn with_timeout<F, T>(future: F, timeout_ms: u64) -> Option<T>
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_future`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `timeout_ms`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:18:44
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub async fn with_timeout<F, T>(future: F, timeout_ms: u64) -> Option<T>
[INFO] [stdout]    |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_ms`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `f1`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:30:30
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub async fn race<F1, F2, T>(f1: F1, f2: F2) -> T
[INFO] [stdout]    |                              ^^ help: if this is intentional, prefix it with an underscore: `_f1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `f2`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:30:38
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub async fn race<F1, F2, T>(f1: F1, f2: F2) -> T
[INFO] [stdout]    |                                      ^^ help: if this is intentional, prefix it with an underscore: `_f2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `items`
[INFO] [stdout]   --> exercises/05_async_programming/03_async_channel/src/lib.rs:17:32
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub async fn producer_consumer(items: Vec<String>) -> Vec<String> {
[INFO] [stdout]    |                                ^^^^^ help: if this is intentional, prefix it with an underscore: `_items`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_producers`
[INFO] [stdout]   --> exercises/05_async_programming/03_async_channel/src/lib.rs:28:21
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub async fn fan_in(n_producers: usize) -> Vec<String> {
[INFO] [stdout]    |                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_producers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `sleep`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:11:19
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tokio::time::{sleep, Duration};
[INFO] [stdout]    |                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cx`
[INFO] [stdout]   --> exercises/05_async_programming/01_basic_future/src/lib.rs:35:35
[INFO] [stdout]    |
[INFO] [stdout] 35 |     fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
[INFO] [stdout]    |                                   ^^ help: if this is intentional, prefix it with an underscore: `_cx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cx`
[INFO] [stdout]   --> exercises/05_async_programming/01_basic_future/src/lib.rs:59:35
[INFO] [stdout]    |
[INFO] [stdout] 59 |     fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
[INFO] [stdout]    |                                   ^^ help: if this is intentional, prefix it with an underscore: `_cx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `items`
[INFO] [stdout]   --> exercises/05_async_programming/03_async_channel/src/lib.rs:17:32
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub async fn producer_consumer(items: Vec<String>) -> Vec<String> {
[INFO] [stdout]    |                                ^^^^^ help: if this is intentional, prefix it with an underscore: `_items`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `future`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:18:33
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub async fn with_timeout<F, T>(future: F, timeout_ms: u64) -> Option<T>
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_future`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_producers`
[INFO] [stdout]   --> exercises/05_async_programming/03_async_channel/src/lib.rs:28:21
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub async fn fan_in(n_producers: usize) -> Vec<String> {
[INFO] [stdout]    |                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_producers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `timeout_ms`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:18:44
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub async fn with_timeout<F, T>(future: F, timeout_ms: u64) -> Option<T>
[INFO] [stdout]    |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_ms`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `f1`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:30:30
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub async fn race<F1, F2, T>(f1: F1, f2: F2) -> T
[INFO] [stdout]    |                              ^^ help: if this is intentional, prefix it with an underscore: `_f1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `f2`
[INFO] [stdout]   --> exercises/05_async_programming/04_select_timeout/src/lib.rs:30:38
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub async fn race<F1, F2, T>(f1: F1, f2: F2) -> T
[INFO] [stdout]    |                                      ^^ help: if this is intentional, prefix it with an underscore: `_f2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `yielded` is never read
[INFO] [stdout]   --> exercises/05_async_programming/01_basic_future/src/lib.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct YieldOnce {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 43 |     yielded: bool,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `sleep`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:11:19
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tokio::time::{sleep, Duration};
[INFO] [stdout]    |                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:16:33
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub async fn concurrent_squares(n: usize) -> Vec<usize> {
[INFO] [stdout]    |                                 ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:27:35
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn parallel_sleep_tasks(n: usize, duration_ms: u64) -> Vec<usize> {
[INFO] [stdout]    |                                   ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `duration_ms`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:27:45
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn parallel_sleep_tasks(n: usize, duration_ms: u64) -> Vec<usize> {
[INFO] [stdout]    |                                             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_duration_ms`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:16:33
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub async fn concurrent_squares(n: usize) -> Vec<usize> {
[INFO] [stdout]    |                                 ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:27:35
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn parallel_sleep_tasks(n: usize, duration_ms: u64) -> Vec<usize> {
[INFO] [stdout]    |                                   ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `duration_ms`
[INFO] [stdout]   --> exercises/05_async_programming/02_tokio_tasks/src/lib.rs:27:45
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn parallel_sleep_tasks(n: usize, duration_ms: u64) -> Vec<usize> {
[INFO] [stdout]    |                                             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_duration_ms`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.40s
[INFO] running `Command { std: "docker" "inspect" "434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925", kill_on_drop: false }`
[INFO] [stdout] 434035f0c56b6194cd57ce43d97546f094ecbfe4c564ce6cfd0f3d1598f43925
