[INFO] updating cached repository vitelabs/pow-gpu [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/vitelabs/pow-gpu [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/vitelabs/pow-gpu" "work/ex/clippy-test-run/sources/stable/gh/vitelabs/pow-gpu"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/vitelabs/pow-gpu'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/vitelabs/pow-gpu" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/vitelabs/pow-gpu"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/vitelabs/pow-gpu'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 6c8e872111e715adb30ea99a71738cd5931284ac [INFO] sha for GitHub repo vitelabs/pow-gpu: 6c8e872111e715adb30ea99a71738cd5931284ac [INFO] validating manifest of vitelabs/pow-gpu 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 vitelabs/pow-gpu 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 vitelabs/pow-gpu [INFO] finished frobbing vitelabs/pow-gpu [INFO] frobbed toml for vitelabs/pow-gpu written to work/ex/clippy-test-run/sources/stable/gh/vitelabs/pow-gpu/Cargo.toml [INFO] started frobbing vitelabs/pow-gpu [INFO] finished frobbing vitelabs/pow-gpu [INFO] frobbed toml for vitelabs/pow-gpu written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/vitelabs/pow-gpu/Cargo.toml [INFO] crate vitelabs/pow-gpu has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting vitelabs/pow-gpu against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/vitelabs/pow-gpu:/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] 59d1f75b8469bb8ea97bc1ad8fc6a241c396db31cddbb64b780e4335846e58c3 [INFO] running `"docker" "start" "-a" "59d1f75b8469bb8ea97bc1ad8fc6a241c396db31cddbb64b780e4335846e58c3"` [INFO] [stderr] Checking nodrop v0.1.12 [INFO] [stderr] Compiling cl-sys v0.4.1 [INFO] [stderr] Checking stable_deref_trait v1.0.0 [INFO] [stderr] Checking smallvec v0.6.1 [INFO] [stderr] Checking crossbeam v0.3.2 [INFO] [stderr] Checking serde v1.0.45 [INFO] [stderr] Checking hex v0.3.2 [INFO] [stderr] Checking crossbeam-utils v0.3.2 [INFO] [stderr] Checking log v0.4.1 [INFO] [stderr] Checking net2 v0.2.32 [INFO] [stderr] Checking num_cpus v1.8.0 [INFO] [stderr] Checking time v0.1.39 [INFO] [stderr] Checking num-traits v0.1.43 [INFO] [stderr] Checking tokio-service v0.1.0 [INFO] [stderr] Checking relay v0.1.1 [INFO] [stderr] Compiling backtrace-sys v0.1.16 [INFO] [stderr] Checking base64 v0.9.1 [INFO] [stderr] Checking owning_ref v0.3.3 [INFO] [stderr] Checking bytes v0.4.7 [INFO] [stderr] Checking arrayvec v0.4.7 [INFO] [stderr] Checking futures-cpupool v0.1.8 [INFO] [stderr] Checking log v0.3.9 [INFO] [stderr] Checking tokio-timer v0.2.3 [INFO] [stderr] Checking mio v0.6.14 [INFO] [stderr] Checking parking_lot_core v0.2.14 [INFO] [stderr] Checking qutex v0.2.1 [INFO] [stderr] Compiling ocl-core v0.9.0 [INFO] [stderr] Checking enum_primitive v0.1.1 [INFO] [stderr] Checking clap v2.31.2 [INFO] [stderr] Checking tokio-io v0.1.6 [INFO] [stderr] Checking crossbeam-epoch v0.4.1 [INFO] [stderr] Checking parking_lot v0.5.5 [INFO] [stderr] Checking crypto-mac v0.5.2 [INFO] [stderr] Checking digest v0.7.2 [INFO] [stderr] Checking mime v0.3.7 [INFO] [stderr] Checking ocl-core-vector v0.1.0 [INFO] [stderr] Checking crossbeam-deque v0.3.1 [INFO] [stderr] Checking blake2 v0.7.1 [INFO] [stderr] Checking tokio-reactor v0.1.1 [INFO] [stderr] Checking tokio-threadpool v0.1.3 [INFO] [stderr] Checking tokio-tcp v0.1.0 [INFO] [stderr] Checking tokio-udp v0.1.0 [INFO] [stderr] Checking tokio-fs v0.1.0 [INFO] [stderr] Checking tokio v0.1.6 [INFO] [stderr] Checking tokio-core v0.1.17 [INFO] [stderr] Checking tokio-proto v0.1.1 [INFO] [stderr] Checking backtrace v0.3.7 [INFO] [stderr] Checking serde_json v1.0.17 [INFO] [stderr] Checking failure v0.1.1 [INFO] [stderr] Checking hyper v0.11.25 [INFO] [stderr] Checking ocl v0.18.0 [INFO] [stderr] Checking dpow-work-server v0.1.7 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `ocl::prm::Ulong` [INFO] [stderr] --> src/gpu.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use ocl::prm::Ulong; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:217:17 [INFO] [stderr] | [INFO] [stderr] 217 | / return Err(json!({ [INFO] [stderr] 218 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 219 | | "hint": "Work field missing", [INFO] [stderr] 220 | | })) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 217 | Err(json!({ [INFO] [stderr] 218 | "error": "Failed to deserialize JSON", [INFO] [stderr] 219 | "hint": "Work field missing", [INFO] [stderr] 220 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:235:17 [INFO] [stderr] | [INFO] [stderr] 235 | / return Err(json!({ [INFO] [stderr] 236 | | "error": "Unknown command", [INFO] [stderr] 237 | | "hint": "Supported commands: work_generate, work_cancel, work_validate" [INFO] [stderr] 238 | | })) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 235 | Err(json!({ [INFO] [stderr] 236 | "error": "Unknown command", [INFO] [stderr] 237 | "hint": "Supported commands: work_generate, work_cancel, work_validate" [INFO] [stderr] 238 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused import: `ocl::prm::Ulong` [INFO] [stderr] --> src/gpu.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use ocl::prm::Ulong; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:217:17 [INFO] [stderr] | [INFO] [stderr] 217 | / return Err(json!({ [INFO] [stderr] 218 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 219 | | "hint": "Work field missing", [INFO] [stderr] 220 | | })) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 217 | Err(json!({ [INFO] [stderr] 218 | "error": "Failed to deserialize JSON", [INFO] [stderr] 219 | "hint": "Work field missing", [INFO] [stderr] 220 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:235:17 [INFO] [stderr] | [INFO] [stderr] 235 | / return Err(json!({ [INFO] [stderr] 236 | | "error": "Unknown command", [INFO] [stderr] 237 | | "hint": "Supported commands: work_generate, work_cancel, work_validate" [INFO] [stderr] 238 | | })) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 235 | Err(json!({ [INFO] [stderr] 236 | "error": "Unknown command", [INFO] [stderr] 237 | "hint": "Supported commands: work_generate, work_cancel, work_validate" [INFO] [stderr] 238 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused variable: `root` [INFO] [stderr] --> src/main.rs:58:15 [INFO] [stderr] | [INFO] [stderr] 58 | fn work_valid(root: [u8; 32], work: [u8; 8], threshold: [u8; 32]) -> bool { [INFO] [stderr] | ^^^^ help: consider using `_root` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `work` [INFO] [stderr] --> src/main.rs:58:31 [INFO] [stderr] | [INFO] [stderr] 58 | fn work_valid(root: [u8; 32], work: [u8; 8], threshold: [u8; 32]) -> bool { [INFO] [stderr] | ^^^^ help: consider using `_work` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `threshold` [INFO] [stderr] --> src/main.rs:58:46 [INFO] [stderr] | [INFO] [stderr] 58 | fn work_valid(root: [u8; 32], work: [u8; 8], threshold: [u8; 32]) -> bool { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_threshold` instead [INFO] [stderr] [INFO] [stderr] warning: function is never used: `work_value` [INFO] [stderr] --> src/main.rs:48:1 [INFO] [stderr] | [INFO] [stderr] 48 | fn work_value(root: [u8; 32], work: [u8; 8]) -> u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `parse_work_json` [INFO] [stderr] --> src/main.rs:155:7 [INFO] [stderr] | [INFO] [stderr] 155 | fn parse_work_json(json: &Value) -> Result<[u8; 8], Value> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/gpu.rs:26:12 [INFO] [stderr] | [INFO] [stderr] 26 | if platforms.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `platforms.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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/main.rs:74:18 [INFO] [stderr] | [INFO] [stderr] 74 | future_work: VecDeque<([u8; 32], [u8; 32], oneshot::Sender>)>, [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/main.rs:156:37 [INFO] [stderr] | [INFO] [stderr] 156 | let root = json.get("work").ok_or(json!({ [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 157 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 158 | | "hint": "Work field missing", [INFO] [stderr] 159 | | }))?; [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 156 | let root = json.get("work").ok_or_else(|| json!({ [INFO] [stderr] 157 | "error": "Failed to deserialize JSON", [INFO] [stderr] 158 | "hint": "Work field missing", [INFO] [stderr] 159 | }))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/main.rs:176:37 [INFO] [stderr] | [INFO] [stderr] 176 | let root = json.get("hash").ok_or(json!({ [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 177 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 178 | | "hint": "Hash field missing", [INFO] [stderr] 179 | | }))?; [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 176 | let root = json.get("hash").ok_or_else(|| json!({ [INFO] [stderr] 177 | "error": "Failed to deserialize JSON", [INFO] [stderr] 178 | "hint": "Hash field missing", [INFO] [stderr] 179 | }))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/main.rs:196:47 [INFO] [stderr] | [INFO] [stderr] 196 | let threshold = json.get("threshold").ok_or(json!({ [INFO] [stderr] | _______________________________________________^ [INFO] [stderr] 197 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 198 | | "hint": "threshold field missing", [INFO] [stderr] 199 | | }))?; [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 196 | let threshold = json.get("threshold").ok_or_else(|| json!({ [INFO] [stderr] 197 | "error": "Failed to deserialize JSON", [INFO] [stderr] 198 | "hint": "threshold field missing", [INFO] [stderr] 199 | }))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused variable: `root` [INFO] [stderr] --> src/main.rs:58:15 [INFO] [stderr] | [INFO] [stderr] 58 | fn work_valid(root: [u8; 32], work: [u8; 8], threshold: [u8; 32]) -> bool { [INFO] [stderr] | ^^^^ help: consider using `_root` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `work` [INFO] [stderr] --> src/main.rs:58:31 [INFO] [stderr] | [INFO] [stderr] 58 | fn work_valid(root: [u8; 32], work: [u8; 8], threshold: [u8; 32]) -> bool { [INFO] [stderr] | ^^^^ help: consider using `_work` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `threshold` [INFO] [stderr] --> src/main.rs:58:46 [INFO] [stderr] | [INFO] [stderr] 58 | fn work_valid(root: [u8; 32], work: [u8; 8], threshold: [u8; 32]) -> bool { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_threshold` instead [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:397:18 [INFO] [stderr] | [INFO] [stderr] 397 | .expect(&format!("Failed to parse GPU platform in string {:?}", s)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to parse GPU platform in string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:402:18 [INFO] [stderr] | [INFO] [stderr] 402 | .expect(&format!("Failed to parse GPU device in string {:?}", s)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to parse GPU device in string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:400:18 [INFO] [stderr] | [INFO] [stderr] 400 | .expect(&format!("GPU string {:?} must have at least one colon", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("GPU string {:?} must have at least one colon", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:407:18 [INFO] [stderr] | [INFO] [stderr] 407 | .expect(&format!("Failed to parse GPU threads in string {:?}", s)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to parse GPU threads in string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:412:18 [INFO] [stderr] | [INFO] [stderr] 412 | .expect(&format!("Failed to create GPU from string {:?}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to create GPU from string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: function is never used: `work_value` [INFO] [stderr] --> src/main.rs:48:1 [INFO] [stderr] | [INFO] [stderr] 48 | fn work_value(root: [u8; 32], work: [u8; 8]) -> u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `parse_work_json` [INFO] [stderr] --> src/main.rs:155:7 [INFO] [stderr] | [INFO] [stderr] 155 | fn parse_work_json(json: &Value) -> Result<[u8; 8], Value> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/gpu.rs:26:12 [INFO] [stderr] | [INFO] [stderr] 26 | if platforms.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `platforms.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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/main.rs:74:18 [INFO] [stderr] | [INFO] [stderr] 74 | future_work: VecDeque<([u8; 32], [u8; 32], oneshot::Sender>)>, [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/main.rs:156:37 [INFO] [stderr] | [INFO] [stderr] 156 | let root = json.get("work").ok_or(json!({ [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 157 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 158 | | "hint": "Work field missing", [INFO] [stderr] 159 | | }))?; [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 156 | let root = json.get("work").ok_or_else(|| json!({ [INFO] [stderr] 157 | "error": "Failed to deserialize JSON", [INFO] [stderr] 158 | "hint": "Work field missing", [INFO] [stderr] 159 | }))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/main.rs:176:37 [INFO] [stderr] | [INFO] [stderr] 176 | let root = json.get("hash").ok_or(json!({ [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 177 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 178 | | "hint": "Hash field missing", [INFO] [stderr] 179 | | }))?; [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 176 | let root = json.get("hash").ok_or_else(|| json!({ [INFO] [stderr] 177 | "error": "Failed to deserialize JSON", [INFO] [stderr] 178 | "hint": "Hash field missing", [INFO] [stderr] 179 | }))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/main.rs:196:47 [INFO] [stderr] | [INFO] [stderr] 196 | let threshold = json.get("threshold").ok_or(json!({ [INFO] [stderr] | _______________________________________________^ [INFO] [stderr] 197 | | "error": "Failed to deserialize JSON", [INFO] [stderr] 198 | | "hint": "threshold field missing", [INFO] [stderr] 199 | | }))?; [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 196 | let threshold = json.get("threshold").ok_or_else(|| json!({ [INFO] [stderr] 197 | "error": "Failed to deserialize JSON", [INFO] [stderr] 198 | "hint": "threshold field missing", [INFO] [stderr] 199 | }))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:397:18 [INFO] [stderr] | [INFO] [stderr] 397 | .expect(&format!("Failed to parse GPU platform in string {:?}", s)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to parse GPU platform in string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:402:18 [INFO] [stderr] | [INFO] [stderr] 402 | .expect(&format!("Failed to parse GPU device in string {:?}", s)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to parse GPU device in string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:400:18 [INFO] [stderr] | [INFO] [stderr] 400 | .expect(&format!("GPU string {:?} must have at least one colon", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("GPU string {:?} must have at least one colon", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:407:18 [INFO] [stderr] | [INFO] [stderr] 407 | .expect(&format!("Failed to parse GPU threads in string {:?}", s)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to parse GPU threads in string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:412:18 [INFO] [stderr] | [INFO] [stderr] 412 | .expect(&format!("Failed to create GPU from string {:?}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Failed to create GPU from string {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 00s [INFO] running `"docker" "inspect" "59d1f75b8469bb8ea97bc1ad8fc6a241c396db31cddbb64b780e4335846e58c3"` [INFO] running `"docker" "rm" "-f" "59d1f75b8469bb8ea97bc1ad8fc6a241c396db31cddbb64b780e4335846e58c3"` [INFO] [stdout] 59d1f75b8469bb8ea97bc1ad8fc6a241c396db31cddbb64b780e4335846e58c3