[INFO] crate msvc-demangler 0.7.0 is already in cache [INFO] extracting crate msvc-demangler 0.7.0 into work/ex/clippy-test-run/sources/stable/reg/msvc-demangler/0.7.0 [INFO] extracting crate msvc-demangler 0.7.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/msvc-demangler/0.7.0 [INFO] validating manifest of msvc-demangler-0.7.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 msvc-demangler-0.7.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 msvc-demangler-0.7.0 [INFO] finished frobbing msvc-demangler-0.7.0 [INFO] frobbed toml for msvc-demangler-0.7.0 written to work/ex/clippy-test-run/sources/stable/reg/msvc-demangler/0.7.0/Cargo.toml [INFO] started frobbing msvc-demangler-0.7.0 [INFO] finished frobbing msvc-demangler-0.7.0 [INFO] frobbed toml for msvc-demangler-0.7.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/msvc-demangler/0.7.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 msvc-demangler-0.7.0 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/reg/msvc-demangler/0.7.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] e194db65f88d161d14096a02d13c30cde1e108b39c598961f8b8acc6b047de6c [INFO] running `"docker" "start" "-a" "e194db65f88d161d14096a02d13c30cde1e108b39c598961f8b8acc6b047de6c"` [INFO] [stderr] Checking msvc-demangler v0.7.0 (/opt/crater/workdir) [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/lib.rs:1687:38 [INFO] [stderr] | [INFO] [stderr] 1687 | write!(self.w, "{}", "\'}")?; // the rest of the "operator" [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/lib.rs:1928:46 [INFO] [stderr] | [INFO] [stderr] 1928 | write!(self.w, "{}", "`vbtable'{for `")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/lib.rs:1687:38 [INFO] [stderr] | [INFO] [stderr] 1687 | write!(self.w, "{}", "\'}")?; // the rest of the "operator" [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/lib.rs:1928:46 [INFO] [stderr] | [INFO] [stderr] 1928 | write!(self.w, "{}", "`vbtable'{for `")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:68:29 [INFO] [stderr] | [INFO] [stderr] 68 | const CONST = 0b00000001; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:69:29 [INFO] [stderr] | [INFO] [stderr] 69 | const VOLATILE = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:70:29 [INFO] [stderr] | [INFO] [stderr] 70 | const FAR = 0b00000100; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:71:29 [INFO] [stderr] | [INFO] [stderr] 71 | const HUGE = 0b00001000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:72:29 [INFO] [stderr] | [INFO] [stderr] 72 | const UNALIGNED = 0b00010000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:73:29 [INFO] [stderr] | [INFO] [stderr] 73 | const RESTRICT = 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:74:29 [INFO] [stderr] | [INFO] [stderr] 74 | const LVALUE_QUAL = 0b01000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:75:29 [INFO] [stderr] | [INFO] [stderr] 75 | const RVALUE_QUAL = 0b10000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:117:31 [INFO] [stderr] | [INFO] [stderr] 117 | const NO_CLASS_TYPE = 0x100000; [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:119:35 [INFO] [stderr] | [INFO] [stderr] 119 | const SPACE_AFTER_COMMA = 0x200000; [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0020_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:121:26 [INFO] [stderr] | [INFO] [stderr] 121 | const HUG_TYPE = 0x400000; [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0040_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:138:28 [INFO] [stderr] | [INFO] [stderr] 138 | const PUBLIC = 0b00000001; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:139:28 [INFO] [stderr] | [INFO] [stderr] 139 | const PROTECTED = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:140:28 [INFO] [stderr] | [INFO] [stderr] 140 | const PRIVATE = 0b00000100; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:141:28 [INFO] [stderr] | [INFO] [stderr] 141 | const GLOBAL = 0b00001000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:142:28 [INFO] [stderr] | [INFO] [stderr] 142 | const STATIC = 0b00010000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:143:28 [INFO] [stderr] | [INFO] [stderr] 143 | const VIRTUAL = 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:144:28 [INFO] [stderr] | [INFO] [stderr] 144 | const FAR = 0b01000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:145:28 [INFO] [stderr] | [INFO] [stderr] 145 | const THUNK = 0b10000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/lib.rs:701:21 [INFO] [stderr] | [INFO] [stderr] 701 | name [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/lib.rs:699:32 [INFO] [stderr] | [INFO] [stderr] 699 | let name = Name::ParsedName(Box::new(self.parse()?)); [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: unneeded return statement [INFO] [stderr] --> src/lib.rs:789:9 [INFO] [stderr] | [INFO] [stderr] 789 | / return Ok(Type::NonMemberFunction( [INFO] [stderr] 790 | | calling_conv, [INFO] [stderr] 791 | | params, [INFO] [stderr] 792 | | StorageClass::empty(), [INFO] [stderr] 793 | | Box::new(return_type), [INFO] [stderr] 794 | | )); [INFO] [stderr] | |___________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 789 | Ok(Type::NonMemberFunction( [INFO] [stderr] 790 | calling_conv, [INFO] [stderr] 791 | params, [INFO] [stderr] 792 | StorageClass::empty(), [INFO] [stderr] 793 | Box::new(return_type), [INFO] [stderr] 794 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:68:29 [INFO] [stderr] | [INFO] [stderr] 68 | const CONST = 0b00000001; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:69:29 [INFO] [stderr] | [INFO] [stderr] 69 | const VOLATILE = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:70:29 [INFO] [stderr] | [INFO] [stderr] 70 | const FAR = 0b00000100; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:71:29 [INFO] [stderr] | [INFO] [stderr] 71 | const HUGE = 0b00001000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:72:29 [INFO] [stderr] | [INFO] [stderr] 72 | const UNALIGNED = 0b00010000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:73:29 [INFO] [stderr] | [INFO] [stderr] 73 | const RESTRICT = 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:74:29 [INFO] [stderr] | [INFO] [stderr] 74 | const LVALUE_QUAL = 0b01000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:75:29 [INFO] [stderr] | [INFO] [stderr] 75 | const RVALUE_QUAL = 0b10000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:117:31 [INFO] [stderr] | [INFO] [stderr] 117 | const NO_CLASS_TYPE = 0x100000; [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:119:35 [INFO] [stderr] | [INFO] [stderr] 119 | const SPACE_AFTER_COMMA = 0x200000; [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0020_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:121:26 [INFO] [stderr] | [INFO] [stderr] 121 | const HUG_TYPE = 0x400000; [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0040_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:138:28 [INFO] [stderr] | [INFO] [stderr] 138 | const PUBLIC = 0b00000001; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:139:28 [INFO] [stderr] | [INFO] [stderr] 139 | const PROTECTED = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:140:28 [INFO] [stderr] | [INFO] [stderr] 140 | const PRIVATE = 0b00000100; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:141:28 [INFO] [stderr] | [INFO] [stderr] 141 | const GLOBAL = 0b00001000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:142:28 [INFO] [stderr] | [INFO] [stderr] 142 | const STATIC = 0b00010000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:143:28 [INFO] [stderr] | [INFO] [stderr] 143 | const VIRTUAL = 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:144:28 [INFO] [stderr] | [INFO] [stderr] 144 | const FAR = 0b01000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/lib.rs:145:28 [INFO] [stderr] | [INFO] [stderr] 145 | const THUNK = 0b10000000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/lib.rs:701:21 [INFO] [stderr] | [INFO] [stderr] 701 | name [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/lib.rs:699:32 [INFO] [stderr] | [INFO] [stderr] 699 | let name = Name::ParsedName(Box::new(self.parse()?)); [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: unneeded return statement [INFO] [stderr] --> src/lib.rs:789:9 [INFO] [stderr] | [INFO] [stderr] 789 | / return Ok(Type::NonMemberFunction( [INFO] [stderr] 790 | | calling_conv, [INFO] [stderr] 791 | | params, [INFO] [stderr] 792 | | StorageClass::empty(), [INFO] [stderr] 793 | | Box::new(return_type), [INFO] [stderr] 794 | | )); [INFO] [stderr] | |___________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 789 | Ok(Type::NonMemberFunction( [INFO] [stderr] 790 | calling_conv, [INFO] [stderr] 791 | params, [INFO] [stderr] 792 | StorageClass::empty(), [INFO] [stderr] 793 | Box::new(return_type), [INFO] [stderr] 794 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:351:21 [INFO] [stderr] | [INFO] [stderr] 351 | / self.consume_digit() [INFO] [stderr] 352 | | .ok_or(Error::new("missing digit".to_owned()))? as i32; [INFO] [stderr] | |______________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 351 | i32::from(self.consume_digit() [INFO] [stderr] 352 | .ok_or(Error::new("missing digit".to_owned()))?); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:352:26 [INFO] [stderr] | [INFO] [stderr] 352 | .ok_or(Error::new("missing digit".to_owned()))? as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new("missing digit".to_owned()))` [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] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:355:27 [INFO] [stderr] | [INFO] [stderr] 355 | + self [INFO] [stderr] | ___________________________^ [INFO] [stderr] 356 | | .consume_digit() [INFO] [stderr] 357 | | .ok_or(Error::new("missing digit".to_owned()))? [INFO] [stderr] 358 | | as i32; [INFO] [stderr] | |__________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 355 | + i32::from(self [INFO] [stderr] 356 | .consume_digit() [INFO] [stderr] 357 | .ok_or(Error::new("missing digit".to_owned()))?); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:357:30 [INFO] [stderr] | [INFO] [stderr] 357 | .ok_or(Error::new("missing digit".to_owned()))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new("missing digit".to_owned()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/lib.rs:437:21 [INFO] [stderr] | [INFO] [stderr] 437 | / let access_class; [INFO] [stderr] 438 | | if func_class.contains(FuncClass::STATIC) { [INFO] [stderr] 439 | | access_class = StorageClass::empty(); [INFO] [stderr] 440 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 458 | | access_class = self.read_qualifier() | restrict | ref_qualifiers; [INFO] [stderr] 459 | | } [INFO] [stderr] | |_____________________^ help: it is more idiomatic to write: `let access_class = if func_class.contains(FuncClass::STATIC) { StorageClass::empty() } else { ..; self.read_qualifier() | restrict | ref_qualifiers };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:615:33 [INFO] [stderr] | [INFO] [stderr] 615 | return Ok(if neg { -(ret as i32) } else { ret as i32 }); [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i32::from(ret)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:615:55 [INFO] [stderr] | [INFO] [stderr] 615 | return Ok(if neg { -(ret as i32) } else { ret as i32 }); [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(ret)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:628:40 [INFO] [stderr] | [INFO] [stderr] 628 | ret = (ret << 4) + ((c - b'A') as i32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(c - b'A')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/lib.rs:1310:1 [INFO] [stderr] | [INFO] [stderr] 1310 | / pub fn demangle<'a>(input: &'a str, flags: DemangleFlags) -> Result { [INFO] [stderr] 1311 | | serialize(&parse(input)?, flags) [INFO] [stderr] 1312 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:1314:1 [INFO] [stderr] | [INFO] [stderr] 1314 | / pub fn parse<'a>(input: &'a str) -> Result { [INFO] [stderr] 1315 | | let mut state = ParserState { [INFO] [stderr] 1316 | | input: input.as_bytes(), [INFO] [stderr] 1317 | | memorized_names: Vec::with_capacity(10), [INFO] [stderr] ... | [INFO] [stderr] 1320 | | state.parse() [INFO] [stderr] 1321 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1400:29 [INFO] [stderr] | [INFO] [stderr] 1400 | let storage_class = match t { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 1401 | | &Type::None => return Ok(()), [INFO] [stderr] 1402 | | &Type::MemberFunction(func_class, calling_conv, _, _, ref inner) => { [INFO] [stderr] 1403 | | if func_class.contains(FuncClass::THUNK) { [INFO] [stderr] ... | [INFO] [stderr] 1620 | | &Type::RTTIType => return Ok(()), [INFO] [stderr] 1621 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1400 | let storage_class = match *t { [INFO] [stderr] 1401 | Type::None => return Ok(()), [INFO] [stderr] 1402 | Type::MemberFunction(func_class, calling_conv, _, _, ref inner) => { [INFO] [stderr] 1403 | if func_class.contains(FuncClass::THUNK) { [INFO] [stderr] 1404 | write!(self.w, "[thunk]:")? [INFO] [stderr] 1405 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1485:17 [INFO] [stderr] | [INFO] [stderr] 1485 | / match inner.as_ref() { [INFO] [stderr] 1486 | | &Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1487 | | | &Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1488 | | | &Type::Array(_, _, _) => { [INFO] [stderr] ... | [INFO] [stderr] 1492 | | _ => {} [INFO] [stderr] 1493 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1485 | match *inner.as_ref() { [INFO] [stderr] 1486 | Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1487 | | Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1488 | | Type::Array(_, _, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1495:17 [INFO] [stderr] | [INFO] [stderr] 1495 | / match t { [INFO] [stderr] 1496 | | &Type::Ptr(_, _) => { [INFO] [stderr] 1497 | | if !self.flags.contains(DemangleFlags::HUG_TYPE) { [INFO] [stderr] 1498 | | self.write_space()?; [INFO] [stderr] ... | [INFO] [stderr] 1514 | | _ => {} [INFO] [stderr] 1515 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1495 | match *t { [INFO] [stderr] 1496 | Type::Ptr(_, _) => { [INFO] [stderr] 1497 | if !self.flags.contains(DemangleFlags::HUG_TYPE) { [INFO] [stderr] 1498 | self.write_space()?; [INFO] [stderr] 1499 | } [INFO] [stderr] 1500 | write!(self.w, "*")? [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1643:17 [INFO] [stderr] | [INFO] [stderr] 1643 | self.w.write(s)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1662:9 [INFO] [stderr] | [INFO] [stderr] 1662 | / match t { [INFO] [stderr] 1663 | | &Type::MemberFunction(_, _, ref params, sc, ref return_type) [INFO] [stderr] 1664 | | | &Type::NonMemberFunction(_, ref params, sc, ref return_type) => { [INFO] [stderr] 1665 | | write!(self.w, "(")?; [INFO] [stderr] ... | [INFO] [stderr] 1718 | | _ => {} [INFO] [stderr] 1719 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1662 | match *t { [INFO] [stderr] 1663 | Type::MemberFunction(_, _, ref params, sc, ref return_type) [INFO] [stderr] 1664 | | Type::NonMemberFunction(_, ref params, sc, ref return_type) => { [INFO] [stderr] 1665 | write!(self.w, "(")?; [INFO] [stderr] 1666 | self.write_types(¶ms.types)?; [INFO] [stderr] 1667 | write!(self.w, ")")?; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1690:17 [INFO] [stderr] | [INFO] [stderr] 1690 | / match inner.as_ref() { [INFO] [stderr] 1691 | | &Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1692 | | | &Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1693 | | | &Type::Array(_, _, _) => { [INFO] [stderr] ... | [INFO] [stderr] 1696 | | _ => {} [INFO] [stderr] 1697 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1690 | match *inner.as_ref() { [INFO] [stderr] 1691 | Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1692 | | Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1693 | | Type::Array(_, _, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1712:21 [INFO] [stderr] | [INFO] [stderr] 1712 | self.w.write(b"}")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1767:17 [INFO] [stderr] | [INFO] [stderr] 1767 | let s = match op { [INFO] [stderr] | _________________^ [INFO] [stderr] 1768 | | &Operator::Ctor => "ctor", [INFO] [stderr] 1769 | | &Operator::Dtor => "dtor", [INFO] [stderr] 1770 | | &Operator::New => "operator new", [INFO] [stderr] ... | [INFO] [stderr] 1855 | | &Operator::RTTIClassHierarchyDescriptor => "`RTTI Class Hierarchy Descriptor'", [INFO] [stderr] 1856 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1767 | let s = match *op { [INFO] [stderr] 1768 | Operator::Ctor => "ctor", [INFO] [stderr] 1769 | Operator::Dtor => "dtor", [INFO] [stderr] 1770 | Operator::New => "operator new", [INFO] [stderr] 1771 | Operator::Delete => "operator delete", [INFO] [stderr] 1772 | Operator::Equal => "operator=", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1862:9 [INFO] [stderr] | [INFO] [stderr] 1862 | / match name { [INFO] [stderr] 1863 | | &Name::Operator(ref op) => { [INFO] [stderr] 1864 | | self.write_space()?; [INFO] [stderr] 1865 | | self.write_operator_name(op)?; [INFO] [stderr] ... | [INFO] [stderr] 1883 | | } [INFO] [stderr] 1884 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1862 | match *name { [INFO] [stderr] 1863 | Name::Operator(ref op) => { [INFO] [stderr] 1864 | self.write_space()?; [INFO] [stderr] 1865 | self.write_operator_name(op)?; [INFO] [stderr] 1866 | //panic!("only the last name should be an operator"); [INFO] [stderr] 1867 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1869:17 [INFO] [stderr] | [INFO] [stderr] 1869 | self.w.write(name)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:1911:9 [INFO] [stderr] | [INFO] [stderr] 1911 | / match &names.name { [INFO] [stderr] 1912 | | &Name::Operator(ref op) => { [INFO] [stderr] 1913 | | match op { [INFO] [stderr] 1914 | | &Operator::Ctor => { [INFO] [stderr] ... | [INFO] [stderr] 1954 | | } [INFO] [stderr] 1955 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 1911 | match names.name { [INFO] [stderr] 1912 | Name::Operator(ref op) => { [INFO] [stderr] 1913 | match op { [INFO] [stderr] 1914 | &Operator::Ctor => { [INFO] [stderr] 1915 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] 1916 | "If there's a ctor, there should be another name in this sequence", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1913:17 [INFO] [stderr] | [INFO] [stderr] 1913 | / match op { [INFO] [stderr] 1914 | | &Operator::Ctor => { [INFO] [stderr] 1915 | | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] 1916 | | "If there's a ctor, there should be another name in this sequence", [INFO] [stderr] ... | [INFO] [stderr] 1936 | | } [INFO] [stderr] 1937 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1913 | match *op { [INFO] [stderr] 1914 | Operator::Ctor => { [INFO] [stderr] 1915 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] 1916 | "If there's a ctor, there should be another name in this sequence", [INFO] [stderr] 1917 | ); [INFO] [stderr] 1918 | self.write_one_name(prev)?; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable [INFO] [stderr] --> src/lib.rs:1915:36 [INFO] [stderr] | [INFO] [stderr] 1915 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_nth)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stderr] [INFO] [stderr] warning: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable [INFO] [stderr] --> src/lib.rs:1921:36 [INFO] [stderr] | [INFO] [stderr] 1921 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1940:17 [INFO] [stderr] | [INFO] [stderr] 1940 | self.w.write(name)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `msvc-demangler`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:351:21 [INFO] [stderr] | [INFO] [stderr] 351 | / self.consume_digit() [INFO] [stderr] 352 | | .ok_or(Error::new("missing digit".to_owned()))? as i32; [INFO] [stderr] | |______________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 351 | i32::from(self.consume_digit() [INFO] [stderr] 352 | .ok_or(Error::new("missing digit".to_owned()))?); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:352:26 [INFO] [stderr] | [INFO] [stderr] 352 | .ok_or(Error::new("missing digit".to_owned()))? as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new("missing digit".to_owned()))` [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] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:355:27 [INFO] [stderr] | [INFO] [stderr] 355 | + self [INFO] [stderr] | ___________________________^ [INFO] [stderr] 356 | | .consume_digit() [INFO] [stderr] 357 | | .ok_or(Error::new("missing digit".to_owned()))? [INFO] [stderr] 358 | | as i32; [INFO] [stderr] | |__________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 355 | + i32::from(self [INFO] [stderr] 356 | .consume_digit() [INFO] [stderr] 357 | .ok_or(Error::new("missing digit".to_owned()))?); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:357:30 [INFO] [stderr] | [INFO] [stderr] 357 | .ok_or(Error::new("missing digit".to_owned()))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new("missing digit".to_owned()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/lib.rs:437:21 [INFO] [stderr] | [INFO] [stderr] 437 | / let access_class; [INFO] [stderr] 438 | | if func_class.contains(FuncClass::STATIC) { [INFO] [stderr] 439 | | access_class = StorageClass::empty(); [INFO] [stderr] 440 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 458 | | access_class = self.read_qualifier() | restrict | ref_qualifiers; [INFO] [stderr] 459 | | } [INFO] [stderr] | |_____________________^ help: it is more idiomatic to write: `let access_class = if func_class.contains(FuncClass::STATIC) { StorageClass::empty() } else { ..; self.read_qualifier() | restrict | ref_qualifiers };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:615:33 [INFO] [stderr] | [INFO] [stderr] 615 | return Ok(if neg { -(ret as i32) } else { ret as i32 }); [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i32::from(ret)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:615:55 [INFO] [stderr] | [INFO] [stderr] 615 | return Ok(if neg { -(ret as i32) } else { ret as i32 }); [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(ret)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:628:40 [INFO] [stderr] | [INFO] [stderr] 628 | ret = (ret << 4) + ((c - b'A') as i32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(c - b'A')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/lib.rs:1310:1 [INFO] [stderr] | [INFO] [stderr] 1310 | / pub fn demangle<'a>(input: &'a str, flags: DemangleFlags) -> Result { [INFO] [stderr] 1311 | | serialize(&parse(input)?, flags) [INFO] [stderr] 1312 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:1314:1 [INFO] [stderr] | [INFO] [stderr] 1314 | / pub fn parse<'a>(input: &'a str) -> Result { [INFO] [stderr] 1315 | | let mut state = ParserState { [INFO] [stderr] 1316 | | input: input.as_bytes(), [INFO] [stderr] 1317 | | memorized_names: Vec::with_capacity(10), [INFO] [stderr] ... | [INFO] [stderr] 1320 | | state.parse() [INFO] [stderr] 1321 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1400:29 [INFO] [stderr] | [INFO] [stderr] 1400 | let storage_class = match t { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 1401 | | &Type::None => return Ok(()), [INFO] [stderr] 1402 | | &Type::MemberFunction(func_class, calling_conv, _, _, ref inner) => { [INFO] [stderr] 1403 | | if func_class.contains(FuncClass::THUNK) { [INFO] [stderr] ... | [INFO] [stderr] 1620 | | &Type::RTTIType => return Ok(()), [INFO] [stderr] 1621 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1400 | let storage_class = match *t { [INFO] [stderr] 1401 | Type::None => return Ok(()), [INFO] [stderr] 1402 | Type::MemberFunction(func_class, calling_conv, _, _, ref inner) => { [INFO] [stderr] 1403 | if func_class.contains(FuncClass::THUNK) { [INFO] [stderr] 1404 | write!(self.w, "[thunk]:")? [INFO] [stderr] 1405 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1485:17 [INFO] [stderr] | [INFO] [stderr] 1485 | / match inner.as_ref() { [INFO] [stderr] 1486 | | &Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1487 | | | &Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1488 | | | &Type::Array(_, _, _) => { [INFO] [stderr] ... | [INFO] [stderr] 1492 | | _ => {} [INFO] [stderr] 1493 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1485 | match *inner.as_ref() { [INFO] [stderr] 1486 | Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1487 | | Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1488 | | Type::Array(_, _, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1495:17 [INFO] [stderr] | [INFO] [stderr] 1495 | / match t { [INFO] [stderr] 1496 | | &Type::Ptr(_, _) => { [INFO] [stderr] 1497 | | if !self.flags.contains(DemangleFlags::HUG_TYPE) { [INFO] [stderr] 1498 | | self.write_space()?; [INFO] [stderr] ... | [INFO] [stderr] 1514 | | _ => {} [INFO] [stderr] 1515 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1495 | match *t { [INFO] [stderr] 1496 | Type::Ptr(_, _) => { [INFO] [stderr] 1497 | if !self.flags.contains(DemangleFlags::HUG_TYPE) { [INFO] [stderr] 1498 | self.write_space()?; [INFO] [stderr] 1499 | } [INFO] [stderr] 1500 | write!(self.w, "*")? [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1643:17 [INFO] [stderr] | [INFO] [stderr] 1643 | self.w.write(s)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1662:9 [INFO] [stderr] | [INFO] [stderr] 1662 | / match t { [INFO] [stderr] 1663 | | &Type::MemberFunction(_, _, ref params, sc, ref return_type) [INFO] [stderr] 1664 | | | &Type::NonMemberFunction(_, ref params, sc, ref return_type) => { [INFO] [stderr] 1665 | | write!(self.w, "(")?; [INFO] [stderr] ... | [INFO] [stderr] 1718 | | _ => {} [INFO] [stderr] 1719 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1662 | match *t { [INFO] [stderr] 1663 | Type::MemberFunction(_, _, ref params, sc, ref return_type) [INFO] [stderr] 1664 | | Type::NonMemberFunction(_, ref params, sc, ref return_type) => { [INFO] [stderr] 1665 | write!(self.w, "(")?; [INFO] [stderr] 1666 | self.write_types(¶ms.types)?; [INFO] [stderr] 1667 | write!(self.w, ")")?; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1690:17 [INFO] [stderr] | [INFO] [stderr] 1690 | / match inner.as_ref() { [INFO] [stderr] 1691 | | &Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1692 | | | &Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1693 | | | &Type::Array(_, _, _) => { [INFO] [stderr] ... | [INFO] [stderr] 1696 | | _ => {} [INFO] [stderr] 1697 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1690 | match *inner.as_ref() { [INFO] [stderr] 1691 | Type::MemberFunction(_, _, _, _, _) [INFO] [stderr] 1692 | | Type::NonMemberFunction(_, _, _, _) [INFO] [stderr] 1693 | | Type::Array(_, _, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1712:21 [INFO] [stderr] | [INFO] [stderr] 1712 | self.w.write(b"}")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1767:17 [INFO] [stderr] | [INFO] [stderr] 1767 | let s = match op { [INFO] [stderr] | _________________^ [INFO] [stderr] 1768 | | &Operator::Ctor => "ctor", [INFO] [stderr] 1769 | | &Operator::Dtor => "dtor", [INFO] [stderr] 1770 | | &Operator::New => "operator new", [INFO] [stderr] ... | [INFO] [stderr] 1855 | | &Operator::RTTIClassHierarchyDescriptor => "`RTTI Class Hierarchy Descriptor'", [INFO] [stderr] 1856 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1767 | let s = match *op { [INFO] [stderr] 1768 | Operator::Ctor => "ctor", [INFO] [stderr] 1769 | Operator::Dtor => "dtor", [INFO] [stderr] 1770 | Operator::New => "operator new", [INFO] [stderr] 1771 | Operator::Delete => "operator delete", [INFO] [stderr] 1772 | Operator::Equal => "operator=", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1862:9 [INFO] [stderr] | [INFO] [stderr] 1862 | / match name { [INFO] [stderr] 1863 | | &Name::Operator(ref op) => { [INFO] [stderr] 1864 | | self.write_space()?; [INFO] [stderr] 1865 | | self.write_operator_name(op)?; [INFO] [stderr] ... | [INFO] [stderr] 1883 | | } [INFO] [stderr] 1884 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1862 | match *name { [INFO] [stderr] 1863 | Name::Operator(ref op) => { [INFO] [stderr] 1864 | self.write_space()?; [INFO] [stderr] 1865 | self.write_operator_name(op)?; [INFO] [stderr] 1866 | //panic!("only the last name should be an operator"); [INFO] [stderr] 1867 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1869:17 [INFO] [stderr] | [INFO] [stderr] 1869 | self.w.write(name)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:1911:9 [INFO] [stderr] | [INFO] [stderr] 1911 | / match &names.name { [INFO] [stderr] 1912 | | &Name::Operator(ref op) => { [INFO] [stderr] 1913 | | match op { [INFO] [stderr] 1914 | | &Operator::Ctor => { [INFO] [stderr] ... | [INFO] [stderr] 1954 | | } [INFO] [stderr] 1955 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 1911 | match names.name { [INFO] [stderr] 1912 | Name::Operator(ref op) => { [INFO] [stderr] 1913 | match op { [INFO] [stderr] 1914 | &Operator::Ctor => { [INFO] [stderr] 1915 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] 1916 | "If there's a ctor, there should be another name in this sequence", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:1913:17 [INFO] [stderr] | [INFO] [stderr] 1913 | / match op { [INFO] [stderr] 1914 | | &Operator::Ctor => { [INFO] [stderr] 1915 | | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] 1916 | | "If there's a ctor, there should be another name in this sequence", [INFO] [stderr] ... | [INFO] [stderr] 1936 | | } [INFO] [stderr] 1937 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1913 | match *op { [INFO] [stderr] 1914 | Operator::Ctor => { [INFO] [stderr] 1915 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] 1916 | "If there's a ctor, there should be another name in this sequence", [INFO] [stderr] 1917 | ); [INFO] [stderr] 1918 | self.write_one_name(prev)?; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable [INFO] [stderr] --> src/lib.rs:1915:36 [INFO] [stderr] | [INFO] [stderr] 1915 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_nth)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stderr] [INFO] [stderr] warning: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable [INFO] [stderr] --> src/lib.rs:1921:36 [INFO] [stderr] | [INFO] [stderr] 1921 | let prev = names.scope.names.iter().nth(0).expect( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:1940:17 [INFO] [stderr] | [INFO] [stderr] 1940 | self.w.write(name)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `msvc-demangler`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "e194db65f88d161d14096a02d13c30cde1e108b39c598961f8b8acc6b047de6c"` [INFO] running `"docker" "rm" "-f" "e194db65f88d161d14096a02d13c30cde1e108b39c598961f8b8acc6b047de6c"` [INFO] [stdout] e194db65f88d161d14096a02d13c30cde1e108b39c598961f8b8acc6b047de6c