[INFO] crate desync 0.3.0 is already in cache [INFO] extracting crate desync 0.3.0 into work/ex/clippy-test-run/sources/stable/reg/desync/0.3.0 [INFO] extracting crate desync 0.3.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/desync/0.3.0 [INFO] validating manifest of desync-0.3.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of desync-0.3.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing desync-0.3.0 [INFO] finished frobbing desync-0.3.0 [INFO] frobbed toml for desync-0.3.0 written to work/ex/clippy-test-run/sources/stable/reg/desync/0.3.0/Cargo.toml [INFO] started frobbing desync-0.3.0 [INFO] finished frobbing desync-0.3.0 [INFO] frobbed toml for desync-0.3.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/desync/0.3.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting desync-0.3.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/desync/0.3.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 5a925609c118821e8ec881b71191676be858d74a69d609cb7e3e7cec2258e890 [INFO] running `"docker" "start" "-a" "5a925609c118821e8ec881b71191676be858d74a69d609cb7e3e7cec2258e890"` [INFO] [stderr] Checking desync v0.3.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/desync.rs:48:13 [INFO] [stderr] | [INFO] [stderr] 48 | queue: queue, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `queue` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pipe.rs:473:17 [INFO] [stderr] | [INFO] [stderr] 473 | next_poll: next_poll [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `next_poll` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/desync.rs:48:13 [INFO] [stderr] | [INFO] [stderr] 48 | queue: queue, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `queue` [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/scheduler_thread.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | thread: thread [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `thread` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pipe.rs:473:17 [INFO] [stderr] | [INFO] [stderr] 473 | next_poll: next_poll [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `next_poll` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/scheduler_thread.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | thread: thread [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `thread` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/scheduler.rs:252:9 [INFO] [stderr] | [INFO] [stderr] 252 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/scheduler.rs:246:22 [INFO] [stderr] | [INFO] [stderr] 246 | let result = Scheduler { [INFO] [stderr] | ______________________^ [INFO] [stderr] 247 | | schedule: Arc::new(Mutex::new(VecDeque::new())), [INFO] [stderr] 248 | | threads: Mutex::new(vec![]), [INFO] [stderr] 249 | | max_threads: Mutex::new(initial_max_threads()) [INFO] [stderr] 250 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/scheduler.rs:461:9 [INFO] [stderr] | [INFO] [stderr] 461 | new_queue [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/scheduler.rs:460:25 [INFO] [stderr] | [INFO] [stderr] 460 | let new_queue = Arc::new(JobQueue::new()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/desync.rs:106:9 [INFO] [stderr] | [INFO] [stderr] 106 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/desync.rs:96:22 [INFO] [stderr] | [INFO] [stderr] 96 | let result = unsafe { [INFO] [stderr] | ______________________^ [INFO] [stderr] 97 | | // As drop() is the last thing called, we know that this object will still exist at the point where the callback occurs [INFO] [stderr] 98 | | let data = DataRef(&*self.data); [INFO] [stderr] 99 | | [INFO] [stderr] ... | [INFO] [stderr] 103 | | }) [INFO] [stderr] 104 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/scheduler.rs:252:9 [INFO] [stderr] | [INFO] [stderr] 252 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/scheduler.rs:246:22 [INFO] [stderr] | [INFO] [stderr] 246 | let result = Scheduler { [INFO] [stderr] | ______________________^ [INFO] [stderr] 247 | | schedule: Arc::new(Mutex::new(VecDeque::new())), [INFO] [stderr] 248 | | threads: Mutex::new(vec![]), [INFO] [stderr] 249 | | max_threads: Mutex::new(initial_max_threads()) [INFO] [stderr] 250 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/scheduler.rs:461:9 [INFO] [stderr] | [INFO] [stderr] 461 | new_queue [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/scheduler.rs:460:25 [INFO] [stderr] | [INFO] [stderr] 460 | let new_queue = Arc::new(JobQueue::new()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/desync.rs:106:9 [INFO] [stderr] | [INFO] [stderr] 106 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/desync.rs:96:22 [INFO] [stderr] | [INFO] [stderr] 96 | let result = unsafe { [INFO] [stderr] | ______________________^ [INFO] [stderr] 97 | | // As drop() is the last thing called, we know that this object will still exist at the point where the callback occurs [INFO] [stderr] 98 | | let data = DataRef(&*self.data); [INFO] [stderr] 99 | | [INFO] [stderr] ... | [INFO] [stderr] 103 | | }) [INFO] [stderr] 104 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/scheduler.rs:226:20 [INFO] [stderr] | [INFO] [stderr] 226 | if core.queue.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `core.queue.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `scheduler::Scheduler` [INFO] [stderr] --> src/scheduler.rs:245:5 [INFO] [stderr] | [INFO] [stderr] 245 | / pub fn new() -> Scheduler { [INFO] [stderr] 246 | | let result = Scheduler { [INFO] [stderr] 247 | | schedule: Arc::new(Mutex::new(VecDeque::new())), [INFO] [stderr] 248 | | threads: Mutex::new(vec![]), [INFO] [stderr] ... | [INFO] [stderr] 252 | | result [INFO] [stderr] 253 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 109 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:249:29 [INFO] [stderr] | [INFO] [stderr] 249 | max_threads: Mutex::new(initial_max_threads()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mutex_atomic)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/scheduler.rs:262:9 [INFO] [stderr] | [INFO] [stderr] 262 | { *self.max_threads.lock().expect("Max threads lock") = max_threads }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `*self.max_threads.lock().expect("Max threads lock") = max_threads;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:262:12 [INFO] [stderr] | [INFO] [stderr] 262 | { *self.max_threads.lock().expect("Max threads lock") = max_threads }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:283:30 [INFO] [stderr] | [INFO] [stderr] 283 | let max_threads = { *self.max_threads.lock().expect("Max threads lock") }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/scheduler.rs:226:20 [INFO] [stderr] | [INFO] [stderr] 226 | if core.queue.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `core.queue.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `scheduler::Scheduler` [INFO] [stderr] --> src/scheduler.rs:245:5 [INFO] [stderr] | [INFO] [stderr] 245 | / pub fn new() -> Scheduler { [INFO] [stderr] 246 | | let result = Scheduler { [INFO] [stderr] 247 | | schedule: Arc::new(Mutex::new(VecDeque::new())), [INFO] [stderr] 248 | | threads: Mutex::new(vec![]), [INFO] [stderr] ... | [INFO] [stderr] 252 | | result [INFO] [stderr] 253 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 109 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:249:29 [INFO] [stderr] | [INFO] [stderr] 249 | max_threads: Mutex::new(initial_max_threads()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mutex_atomic)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/scheduler.rs:262:9 [INFO] [stderr] | [INFO] [stderr] 262 | { *self.max_threads.lock().expect("Max threads lock") = max_threads }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `*self.max_threads.lock().expect("Max threads lock") = max_threads;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:262:12 [INFO] [stderr] | [INFO] [stderr] 262 | { *self.max_threads.lock().expect("Max threads lock") = max_threads }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:379:30 [INFO] [stderr] | [INFO] [stderr] 379 | let max_threads = { *self.max_threads.lock().expect("Max threads lock") }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:384:40 [INFO] [stderr] | [INFO] [stderr] 384 | let is_busy = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:283:30 [INFO] [stderr] | [INFO] [stderr] 283 | let max_threads = { *self.max_threads.lock().expect("Max threads lock") }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/scheduler.rs:427:20 [INFO] [stderr] | [INFO] [stderr] 427 | if core.queue.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!core.queue.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:451:36 [INFO] [stderr] | [INFO] [stderr] 451 | let is_busy = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicUsize instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:379:30 [INFO] [stderr] | [INFO] [stderr] 379 | let max_threads = { *self.max_threads.lock().expect("Max threads lock") }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:384:40 [INFO] [stderr] | [INFO] [stderr] 384 | let is_busy = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/scheduler.rs:427:20 [INFO] [stderr] | [INFO] [stderr] 427 | if core.queue.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!core.queue.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: Consider using an AtomicBool instead of a Mutex here. If you just want the locking behaviour and not the internal type, consider using Mutex<()>. [INFO] [stderr] --> src/scheduler.rs:451:36 [INFO] [stderr] | [INFO] [stderr] 451 | let is_busy = Arc::new(Mutex::new(false)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutex_atomic [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/pipe.rs:247:9 [INFO] [stderr] | [INFO] [stderr] 247 | / loop { [INFO] [stderr] 248 | | let stream_core = stream_core.upgrade(); [INFO] [stderr] 249 | | [INFO] [stderr] 250 | | if let Some(stream_core) = stream_core { [INFO] [stderr] ... | [INFO] [stderr] 334 | | } [INFO] [stderr] 335 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/pipe.rs:292:29 [INFO] [stderr] | [INFO] [stderr] 292 | notify.map(|notify| notify.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(notify) = notify { notify.notify() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/pipe.rs:323:21 [INFO] [stderr] | [INFO] [stderr] 323 | notify.map(|notify| notify.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(notify) = notify { notify.notify() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/pipe.rs:437:9 [INFO] [stderr] | [INFO] [stderr] 437 | notify.map(|notify| notify.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(notify) = notify { notify.notify() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/pipe.rs:247:9 [INFO] [stderr] | [INFO] [stderr] 247 | / loop { [INFO] [stderr] 248 | | let stream_core = stream_core.upgrade(); [INFO] [stderr] 249 | | [INFO] [stderr] 250 | | if let Some(stream_core) = stream_core { [INFO] [stderr] ... | [INFO] [stderr] 334 | | } [INFO] [stderr] 335 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/pipe.rs:292:29 [INFO] [stderr] | [INFO] [stderr] 292 | notify.map(|notify| notify.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(notify) = notify { notify.notify() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/pipe.rs:323:21 [INFO] [stderr] | [INFO] [stderr] 323 | notify.map(|notify| notify.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(notify) = notify { notify.notify() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/unsafe_job.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new<'a>(action: &'a dyn ScheduledJob) -> UnsafeJob { [INFO] [stderr] 18 | | let action_ptr: *const dyn ScheduledJob = action; [INFO] [stderr] 19 | | [INFO] [stderr] 20 | | // Transmute to remove the lifetime parameter :-/ [INFO] [stderr] 21 | | // (We're safe provided this job is executed before the reference goes away) [INFO] [stderr] 22 | | unsafe { UnsafeJob { action: mem::transmute(action_ptr) } } [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer to a pointer [INFO] [stderr] --> src/unsafe_job.rs:22:38 [INFO] [stderr] | [INFO] [stderr] 22 | unsafe { UnsafeJob { action: mem::transmute(action_ptr) } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `action_ptr as *const (dyn job::ScheduledJob + 'static)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/scheduler_thread.rs:23:34 [INFO] [stderr] | [INFO] [stderr] 23 | let (jobs_in, jobs_out): (Sender>, Receiver>) = channel(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/pipe.rs:437:9 [INFO] [stderr] | [INFO] [stderr] 437 | notify.map(|notify| notify.notify()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(notify) = notify { notify.notify() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/unsafe_job.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new<'a>(action: &'a dyn ScheduledJob) -> UnsafeJob { [INFO] [stderr] 18 | | let action_ptr: *const dyn ScheduledJob = action; [INFO] [stderr] 19 | | [INFO] [stderr] 20 | | // Transmute to remove the lifetime parameter :-/ [INFO] [stderr] 21 | | // (We're safe provided this job is executed before the reference goes away) [INFO] [stderr] 22 | | unsafe { UnsafeJob { action: mem::transmute(action_ptr) } } [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: transmute from a pointer to a pointer [INFO] [stderr] --> src/unsafe_job.rs:22:38 [INFO] [stderr] | [INFO] [stderr] 22 | unsafe { UnsafeJob { action: mem::transmute(action_ptr) } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `action_ptr as *const (dyn job::ScheduledJob + 'static)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/scheduler_thread.rs:23:34 [INFO] [stderr] | [INFO] [stderr] 23 | let (jobs_in, jobs_out): (Sender>, Receiver>) = channel(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: Could not compile `desync`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `desync`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "5a925609c118821e8ec881b71191676be858d74a69d609cb7e3e7cec2258e890"` [INFO] running `"docker" "rm" "-f" "5a925609c118821e8ec881b71191676be858d74a69d609cb7e3e7cec2258e890"` [INFO] [stdout] 5a925609c118821e8ec881b71191676be858d74a69d609cb7e3e7cec2258e890