[INFO] crate lockfreehashmap 0.1.2 is already in cache [INFO] extracting crate lockfreehashmap 0.1.2 into work/ex/clippy-test-run/sources/stable/reg/lockfreehashmap/0.1.2 [INFO] extracting crate lockfreehashmap 0.1.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lockfreehashmap/0.1.2 [INFO] validating manifest of lockfreehashmap-0.1.2 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 lockfreehashmap-0.1.2 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 lockfreehashmap-0.1.2 [INFO] finished frobbing lockfreehashmap-0.1.2 [INFO] frobbed toml for lockfreehashmap-0.1.2 written to work/ex/clippy-test-run/sources/stable/reg/lockfreehashmap/0.1.2/Cargo.toml [INFO] started frobbing lockfreehashmap-0.1.2 [INFO] finished frobbing lockfreehashmap-0.1.2 [INFO] frobbed toml for lockfreehashmap-0.1.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lockfreehashmap/0.1.2/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 lockfreehashmap-0.1.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/lockfreehashmap/0.1.2:/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] 742bfb9b44be410508e7f027dbafe1ae3dc6bbeae067a355e5fcc4febfe280cc [INFO] running `"docker" "start" "-a" "742bfb9b44be410508e7f027dbafe1ae3dc6bbeae067a355e5fcc4febfe280cc"` [INFO] [stderr] Checking crossbeam-epoch v0.4.3 [INFO] [stderr] Checking lockfreehashmap v0.1.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/map_inner.rs:429:13 [INFO] [stderr] | [INFO] [stderr] 429 | map: map, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `map` [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/map_inner.rs:429:13 [INFO] [stderr] | [INFO] [stderr] 429 | map: map, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `map` [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: unneeded return statement [INFO] [stderr] --> src/map_inner.rs:537:17 [INFO] [stderr] | [INFO] [stderr] 537 | 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/map_inner.rs:543:17 [INFO] [stderr] | [INFO] [stderr] 543 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/map_inner.rs:838:72 [INFO] [stderr] | [INFO] [stderr] 838 | = (Wrapping(array_element_byte_size) * Wrapping(size)) >> (2^10 * 2^10); [INFO] [stderr] | ^^^^^^^^ help: consider parenthesizing your expression: `2 ^ (10 * 2)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/map_inner.rs:935:9 [INFO] [stderr] | [INFO] [stderr] 935 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [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/lib.rs:187:9 [INFO] [stderr] | [INFO] [stderr] 187 | return self.load_inner(guard).get(key, &self.inner, guard); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.load_inner(guard).get(key, &self.inner, guard)` [INFO] [stderr] | [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/lib.rs:217:9 [INFO] [stderr] | [INFO] [stderr] 217 | return ValueSlot::as_inner(value_slot); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ValueSlot::as_inner(value_slot)` [INFO] [stderr] | [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/lib.rs:247:9 [INFO] [stderr] | [INFO] [stderr] 247 | return ValueSlot::as_inner(value_slot); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ValueSlot::as_inner(value_slot)` [INFO] [stderr] | [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/lib.rs:274:9 [INFO] [stderr] | [INFO] [stderr] 274 | return ValueSlot::as_inner(value_slot); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ValueSlot::as_inner(value_slot)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:29:26 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn as_maybe_null(&self) -> MaybeNull<'t, T> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:32:22 [INFO] [stderr] | [INFO] [stderr] 32 | pub fn as_shared(&self) -> Shared<'t, T> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:36:22 [INFO] [stderr] | [INFO] [stderr] 36 | pub fn deref<'f>(&'f self) -> &'t T { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [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/atomic.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / fn clone<'b>(&'b self) -> Self { [INFO] [stderr] 64 | | NotNull(self.0) [INFO] [stderr] 65 | | } [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/atomic.rs:112:5 [INFO] [stderr] | [INFO] [stderr] 112 | / fn clone<'b>(&'b self) -> Self { [INFO] [stderr] 113 | | MaybeNull(self.0) [INFO] [stderr] 114 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:127:22 [INFO] [stderr] | [INFO] [stderr] 127 | pub fn as_option(&self) -> Option> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/atomic.rs:128:9 [INFO] [stderr] | [INFO] [stderr] 128 | / match self.0.is_null() { [INFO] [stderr] 129 | | true => None, [INFO] [stderr] 130 | | false => Some(NotNull(self.0)), [INFO] [stderr] 131 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.0.is_null() { None } else { Some(NotNull(self.0)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/atomic.rs:185:9 [INFO] [stderr] | [INFO] [stderr] 185 | / match shared.is_null() { [INFO] [stderr] 186 | | true => None, [INFO] [stderr] 187 | | false => Some(shared.into_owned().into_box()) [INFO] [stderr] 188 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if shared.is_null() { None } else { Some(shared.into_owned().into_box()) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:195:18 [INFO] [stderr] | [INFO] [stderr] 195 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:206:18 [INFO] [stderr] | [INFO] [stderr] 206 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:217:18 [INFO] [stderr] | [INFO] [stderr] 217 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:229:18 [INFO] [stderr] | [INFO] [stderr] 229 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:241:18 [INFO] [stderr] | [INFO] [stderr] 241 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:289:18 [INFO] [stderr] | [INFO] [stderr] 289 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:190:9 [INFO] [stderr] | [INFO] [stderr] 190 | / match self { [INFO] [stderr] 191 | | &ValueSlot::Tombstone => true, [INFO] [stderr] 192 | | _ => false, [INFO] [stderr] 193 | | } [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] 190 | match *self { [INFO] [stderr] 191 | ValueSlot::Tombstone => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / match self { [INFO] [stderr] 199 | | &ValueSlot::ValuePrime(_) => true, [INFO] [stderr] 200 | | _ => false, [INFO] [stderr] 201 | | } [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] 198 | match *self { [INFO] [stderr] 199 | ValueSlot::ValuePrime(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:206:9 [INFO] [stderr] | [INFO] [stderr] 206 | / match self { [INFO] [stderr] 207 | | &ValueSlot::Value(_) => true, [INFO] [stderr] 208 | | _ => false, [INFO] [stderr] 209 | | } [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] 206 | match *self { [INFO] [stderr] 207 | ValueSlot::Value(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | / match self { [INFO] [stderr] 215 | | &ValueSlot::SeeNewTable => true, [INFO] [stderr] 216 | | _ => false, [INFO] [stderr] 217 | | } [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] 214 | match *self { [INFO] [stderr] 215 | ValueSlot::SeeNewTable => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:223:9 [INFO] [stderr] | [INFO] [stderr] 223 | / match self { [INFO] [stderr] 224 | | &ValueSlot::SeeNewTable | &ValueSlot::ValuePrime(_) => true, [INFO] [stderr] 225 | | _ => false, [INFO] [stderr] 226 | | } [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] 223 | match *self { [INFO] [stderr] 224 | ValueSlot::SeeNewTable | ValueSlot::ValuePrime(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/map_inner.rs:230:21 [INFO] [stderr] | [INFO] [stderr] 230 | pub fn as_inner(value: Option<&Self>) -> Option<&V> { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:270:9 [INFO] [stderr] | [INFO] [stderr] 270 | / match self { [INFO] [stderr] 271 | | &KeyCompare::Owned(ref owned) => QRef::Owned(owned), [INFO] [stderr] 272 | | &KeyCompare::Shared(ref not_null) => QRef::Shared(not_null), [INFO] [stderr] 273 | | &KeyCompare::OnlyCompare(q) => QRef::Borrow(q), [INFO] [stderr] 274 | | } [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] 270 | match *self { [INFO] [stderr] 271 | KeyCompare::Owned(ref owned) => QRef::Owned(owned), [INFO] [stderr] 272 | KeyCompare::Shared(ref not_null) => QRef::Shared(not_null), [INFO] [stderr] 273 | KeyCompare::OnlyCompare(q) => QRef::Borrow(q), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:287:9 [INFO] [stderr] | [INFO] [stderr] 287 | / match self { [INFO] [stderr] 288 | | &QRef::Owned(not_null) => QRef2::Shared(&**not_null), [INFO] [stderr] 289 | | &QRef::Shared(&KeySlot::Key(ref k)) => QRef2::Shared(k), [INFO] [stderr] 290 | | &QRef::Shared(&KeySlot::SeeNewTable) => [INFO] [stderr] 291 | | unreachable!("KeyCompare must contain a `NotNull(KeySlot::Key(K))`"), [INFO] [stderr] 292 | | &QRef::Borrow(q) => QRef2::Borrow(q), [INFO] [stderr] 293 | | } [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] 287 | match *self { [INFO] [stderr] 288 | QRef::Owned(not_null) => QRef2::Shared(&**not_null), [INFO] [stderr] 289 | QRef::Shared(&KeySlot::Key(ref k)) => QRef2::Shared(k), [INFO] [stderr] 290 | QRef::Shared(&KeySlot::SeeNewTable) => [INFO] [stderr] 291 | unreachable!("KeyCompare must contain a `NotNull(KeySlot::Key(K))`"), [INFO] [stderr] 292 | QRef::Borrow(q) => QRef2::Borrow(q), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:305:9 [INFO] [stderr] | [INFO] [stderr] 305 | / match self { [INFO] [stderr] 306 | | &QRef2::Shared(k) => k.borrow(), [INFO] [stderr] 307 | | &QRef2::Borrow(q) => q, [INFO] [stderr] 308 | | } [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] 305 | match *self { [INFO] [stderr] 306 | QRef2::Shared(k) => k.borrow(), [INFO] [stderr] 307 | QRef2::Borrow(q) => q, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:330:9 [INFO] [stderr] | [INFO] [stderr] 330 | / match self { [INFO] [stderr] 331 | | &PutValue::Owned(ref owned) => if let ValueSlot::Tombstone = **owned { [INFO] [stderr] 332 | | true [INFO] [stderr] 333 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 342 | | }, [INFO] [stderr] 343 | | } [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] 330 | match *self { [INFO] [stderr] 331 | PutValue::Owned(ref owned) => if let ValueSlot::Tombstone = **owned { [INFO] [stderr] 332 | true [INFO] [stderr] 333 | } else { [INFO] [stderr] 334 | false [INFO] [stderr] 335 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:337:17 [INFO] [stderr] | [INFO] [stderr] 337 | / if let &ValueSlot::Tombstone = &**not_null { [INFO] [stderr] 338 | | true [INFO] [stderr] 339 | | } else { [INFO] [stderr] 340 | | false [INFO] [stderr] 341 | | } [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] 337 | if let ValueSlot::Tombstone = **not_null { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/map_inner.rs:347:9 [INFO] [stderr] | [INFO] [stderr] 347 | / if (&*value as *const _) == self.as_raw() { [INFO] [stderr] 348 | | true [INFO] [stderr] 349 | | } else { [INFO] [stderr] 350 | | false [INFO] [stderr] 351 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `(&*value as *const _) == self.as_raw()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:355:9 [INFO] [stderr] | [INFO] [stderr] 355 | / match self { [INFO] [stderr] 356 | | &PutValue::Owned(ref not_null) => &**not_null as *const _, [INFO] [stderr] 357 | | &PutValue::Shared(ref not_null) => &**not_null as *const _, [INFO] [stderr] 358 | | } [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] 355 | match *self { [INFO] [stderr] 356 | PutValue::Owned(ref not_null) => &**not_null as *const _, [INFO] [stderr] 357 | PutValue::Shared(ref not_null) => &**not_null as *const _, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/map_inner.rs:453:44 [INFO] [stderr] | [INFO] [stderr] 453 | } else if result > upper_bound { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 454 | | upper_bound [INFO] [stderr] 455 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/map_inner.rs:451:53 [INFO] [stderr] | [INFO] [stderr] 451 | if first != 0 && result/first != second { [INFO] [stderr] | _____________________________________________________^ [INFO] [stderr] 452 | | upper_bound [INFO] [stderr] 453 | | } else if result > upper_bound { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 44 [INFO] [stderr] --> src/map_inner.rs:565:5 [INFO] [stderr] | [INFO] [stderr] 565 | / pub fn copy_slot( [INFO] [stderr] 566 | | &self, [INFO] [stderr] 567 | | new_map: &Self, [INFO] [stderr] 568 | | old_map_index: usize, [INFO] [stderr] ... | [INFO] [stderr] 804 | | return; [INFO] [stderr] 805 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:591:35 [INFO] [stderr] | [INFO] [stderr] 591 | debug_assert!(if let &KeySlot::SeeNewTable = &*_new_key {true} else {false}); [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] 591 | debug_assert!(if let KeySlot::SeeNewTable = *_new_key {true} else {false}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:604:29 [INFO] [stderr] | [INFO] [stderr] 604 | / match k.deref() { [INFO] [stderr] 605 | | &KeySlot::SeeNewTable => return, [INFO] [stderr] 606 | | &KeySlot::Key(_) => { [INFO] [stderr] 607 | | debug_assert!(current.as_option().is_some()); [INFO] [stderr] ... | [INFO] [stderr] 610 | | }, [INFO] [stderr] 611 | | } [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] 604 | match *k.deref() { [INFO] [stderr] 605 | KeySlot::SeeNewTable => return, [INFO] [stderr] 606 | KeySlot::Key(_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:664:35 [INFO] [stderr] | [INFO] [stderr] 664 | Some(not_null) => match not_null.deref() { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 665 | | // Some other thread copied the slot already. Nothing to do or free here. [INFO] [stderr] 666 | | &ValueSlot::SeeNewTable => return, [INFO] [stderr] 667 | | &ValueSlot::Tombstone => { [INFO] [stderr] ... | [INFO] [stderr] 723 | | } [INFO] [stderr] 724 | | } [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] 664 | Some(not_null) => match *not_null.deref() { [INFO] [stderr] 665 | // Some other thread copied the slot already. Nothing to do or free here. [INFO] [stderr] 666 | ValueSlot::SeeNewTable => return, [INFO] [stderr] 667 | ValueSlot::Tombstone => { [INFO] [stderr] 668 | match atomic_value_slot.compare_and_set_owned( [INFO] [stderr] 669 | old_value, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:737:25 [INFO] [stderr] | [INFO] [stderr] 737 | let put_value = match not_null_old_value.deref() { [INFO] [stderr] | _________________________^ [INFO] [stderr] 738 | | &ValueSlot::Value(_) => PutValue::Shared(not_null_old_value), [INFO] [stderr] 739 | | &ValueSlot::ValuePrime(v) => match v { [INFO] [stderr] 740 | | &ValueSlot::Value(_) => [INFO] [stderr] ... | [INFO] [stderr] 747 | | &ValueSlot::SeeNewTable => unreachable!(), [INFO] [stderr] 748 | | }; [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] 737 | let put_value = match *not_null_old_value.deref() { [INFO] [stderr] 738 | ValueSlot::Value(_) => PutValue::Shared(not_null_old_value), [INFO] [stderr] 739 | ValueSlot::ValuePrime(v) => match v { [INFO] [stderr] 740 | &ValueSlot::Value(_) => [INFO] [stderr] 741 | PutValue::Shared(MaybeNull::from_shared(Shared::from(v as *const _)) [INFO] [stderr] 742 | .as_option().expect("v is a reference and can't be null") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:739:42 [INFO] [stderr] | [INFO] [stderr] 739 | &ValueSlot::ValuePrime(v) => match v { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 740 | | &ValueSlot::Value(_) => [INFO] [stderr] 741 | | PutValue::Shared(MaybeNull::from_shared(Shared::from(v as *const _)) [INFO] [stderr] 742 | | .as_option().expect("v is a reference and can't be null") [INFO] [stderr] 743 | | ), [INFO] [stderr] 744 | | _ => unreachable!("`ValuePrime` can only be a reference to a `Value`"), [INFO] [stderr] 745 | | } [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] 739 | &ValueSlot::ValuePrime(v) => match *v { [INFO] [stderr] 740 | ValueSlot::Value(_) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:912:13 [INFO] [stderr] | [INFO] [stderr] 912 | / match &*atomic_key_slot.load(&guard).as_option()? { [INFO] [stderr] 913 | | &KeySlot::Key(ref k) => if self.keys_are_equal(k, key) { [INFO] [stderr] 914 | | match atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | | &ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] ... | [INFO] [stderr] 932 | | }, [INFO] [stderr] 933 | | } [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] 912 | match *atomic_key_slot.load(&guard).as_option()? { [INFO] [stderr] 913 | KeySlot::Key(ref k) => if self.keys_are_equal(k, key) { [INFO] [stderr] 914 | match atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | &ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] 916 | &ValueSlot::Tombstone => return None, [INFO] [stderr] 917 | &ValueSlot::ValuePrime(_) | &ValueSlot::SeeNewTable => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:914:21 [INFO] [stderr] | [INFO] [stderr] 914 | / match atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | | &ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] 916 | | &ValueSlot::Tombstone => return None, [INFO] [stderr] 917 | | &ValueSlot::ValuePrime(_) | &ValueSlot::SeeNewTable => { [INFO] [stderr] ... | [INFO] [stderr] 920 | | } [INFO] [stderr] 921 | | } [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] 914 | match *atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] 916 | ValueSlot::Tombstone => return None, [INFO] [stderr] 917 | ValueSlot::ValuePrime(_) | ValueSlot::SeeNewTable => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:1065:13 [INFO] [stderr] | [INFO] [stderr] 1065 | / match &*current_key { [INFO] [stderr] 1066 | | &KeySlot::Key(ref current_key) => if self.keys_are_equal(key.as_qref().as_qref2().as_q(), current_key.borrow()) { [INFO] [stderr] 1067 | | key_index = Some(index); [INFO] [stderr] 1068 | | break 'find_key_loop; [INFO] [stderr] ... | [INFO] [stderr] 1072 | | }, [INFO] [stderr] 1073 | | } [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] 1065 | match *current_key { [INFO] [stderr] 1066 | KeySlot::Key(ref current_key) => if self.keys_are_equal(key.as_qref().as_qref2().as_q(), current_key.borrow()) { [INFO] [stderr] 1067 | key_index = Some(index); [INFO] [stderr] 1068 | break 'find_key_loop; [INFO] [stderr] 1069 | }, // else continue [INFO] [stderr] 1070 | KeySlot::SeeNewTable => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: item `LockFreeHashMap<'v, K, V>` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/lib.rs:77:1 [INFO] [stderr] | [INFO] [stderr] 77 | / impl<'guard, 'v: 'guard, K: Hash + Eq + 'guard, V: PartialEq> LockFreeHashMap<'v,K,V> { [INFO] [stderr] 78 | | [INFO] [stderr] 79 | | /// Creates a new `LockFreeHashMap`. [INFO] [stderr] 80 | | /// [INFO] [stderr] ... | [INFO] [stderr] 275 | | } [INFO] [stderr] 276 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `LockFreeHashMap<'v, K, V>` [INFO] [stderr] --> src/lib.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | / pub fn new() -> Self { [INFO] [stderr] 88 | | Self::with_capacity(Self::DEFAULT_CAPACITY) [INFO] [stderr] 89 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 77 | impl Default for LockFreeHashMap<'v, K, V> { [INFO] [stderr] 78 | fn default() -> Self { [INFO] [stderr] 79 | Self::new() [INFO] [stderr] 80 | } [INFO] [stderr] 81 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/map_inner.rs:537:17 [INFO] [stderr] | [INFO] [stderr] 537 | 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/map_inner.rs:543:17 [INFO] [stderr] | [INFO] [stderr] 543 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/map_inner.rs:838:72 [INFO] [stderr] | [INFO] [stderr] 838 | = (Wrapping(array_element_byte_size) * Wrapping(size)) >> (2^10 * 2^10); [INFO] [stderr] | ^^^^^^^^ help: consider parenthesizing your expression: `2 ^ (10 * 2)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/map_inner.rs:935:9 [INFO] [stderr] | [INFO] [stderr] 935 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [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/lib.rs:187:9 [INFO] [stderr] | [INFO] [stderr] 187 | return self.load_inner(guard).get(key, &self.inner, guard); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.load_inner(guard).get(key, &self.inner, guard)` [INFO] [stderr] | [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/lib.rs:217:9 [INFO] [stderr] | [INFO] [stderr] 217 | return ValueSlot::as_inner(value_slot); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ValueSlot::as_inner(value_slot)` [INFO] [stderr] | [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/lib.rs:247:9 [INFO] [stderr] | [INFO] [stderr] 247 | return ValueSlot::as_inner(value_slot); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ValueSlot::as_inner(value_slot)` [INFO] [stderr] | [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/lib.rs:274:9 [INFO] [stderr] | [INFO] [stderr] 274 | return ValueSlot::as_inner(value_slot); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ValueSlot::as_inner(value_slot)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] error: Could not compile `lockfreehashmap`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:29:26 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn as_maybe_null(&self) -> MaybeNull<'t, T> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:32:22 [INFO] [stderr] | [INFO] [stderr] 32 | pub fn as_shared(&self) -> Shared<'t, T> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:36:22 [INFO] [stderr] | [INFO] [stderr] 36 | pub fn deref<'f>(&'f self) -> &'t T { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [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/atomic.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / fn clone<'b>(&'b self) -> Self { [INFO] [stderr] 64 | | NotNull(self.0) [INFO] [stderr] 65 | | } [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/atomic.rs:112:5 [INFO] [stderr] | [INFO] [stderr] 112 | / fn clone<'b>(&'b self) -> Self { [INFO] [stderr] 113 | | MaybeNull(self.0) [INFO] [stderr] 114 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/atomic.rs:127:22 [INFO] [stderr] | [INFO] [stderr] 127 | pub fn as_option(&self) -> Option> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/atomic.rs:128:9 [INFO] [stderr] | [INFO] [stderr] 128 | / match self.0.is_null() { [INFO] [stderr] 129 | | true => None, [INFO] [stderr] 130 | | false => Some(NotNull(self.0)), [INFO] [stderr] 131 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.0.is_null() { None } else { Some(NotNull(self.0)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/atomic.rs:185:9 [INFO] [stderr] | [INFO] [stderr] 185 | / match shared.is_null() { [INFO] [stderr] 186 | | true => None, [INFO] [stderr] 187 | | false => Some(shared.into_owned().into_box()) [INFO] [stderr] 188 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if shared.is_null() { None } else { Some(shared.into_owned().into_box()) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:195:18 [INFO] [stderr] | [INFO] [stderr] 195 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:206:18 [INFO] [stderr] | [INFO] [stderr] 206 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:217:18 [INFO] [stderr] | [INFO] [stderr] 217 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:229:18 [INFO] [stderr] | [INFO] [stderr] 229 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:241:18 [INFO] [stderr] | [INFO] [stderr] 241 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/atomic.rs:289:18 [INFO] [stderr] | [INFO] [stderr] 289 | .map(|set| NotNull(set)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `NotNull` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:190:9 [INFO] [stderr] | [INFO] [stderr] 190 | / match self { [INFO] [stderr] 191 | | &ValueSlot::Tombstone => true, [INFO] [stderr] 192 | | _ => false, [INFO] [stderr] 193 | | } [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] 190 | match *self { [INFO] [stderr] 191 | ValueSlot::Tombstone => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / match self { [INFO] [stderr] 199 | | &ValueSlot::ValuePrime(_) => true, [INFO] [stderr] 200 | | _ => false, [INFO] [stderr] 201 | | } [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] 198 | match *self { [INFO] [stderr] 199 | ValueSlot::ValuePrime(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:206:9 [INFO] [stderr] | [INFO] [stderr] 206 | / match self { [INFO] [stderr] 207 | | &ValueSlot::Value(_) => true, [INFO] [stderr] 208 | | _ => false, [INFO] [stderr] 209 | | } [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] 206 | match *self { [INFO] [stderr] 207 | ValueSlot::Value(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | / match self { [INFO] [stderr] 215 | | &ValueSlot::SeeNewTable => true, [INFO] [stderr] 216 | | _ => false, [INFO] [stderr] 217 | | } [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] 214 | match *self { [INFO] [stderr] 215 | ValueSlot::SeeNewTable => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:223:9 [INFO] [stderr] | [INFO] [stderr] 223 | / match self { [INFO] [stderr] 224 | | &ValueSlot::SeeNewTable | &ValueSlot::ValuePrime(_) => true, [INFO] [stderr] 225 | | _ => false, [INFO] [stderr] 226 | | } [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] 223 | match *self { [INFO] [stderr] 224 | ValueSlot::SeeNewTable | ValueSlot::ValuePrime(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/map_inner.rs:230:21 [INFO] [stderr] | [INFO] [stderr] 230 | pub fn as_inner(value: Option<&Self>) -> Option<&V> { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:270:9 [INFO] [stderr] | [INFO] [stderr] 270 | / match self { [INFO] [stderr] 271 | | &KeyCompare::Owned(ref owned) => QRef::Owned(owned), [INFO] [stderr] 272 | | &KeyCompare::Shared(ref not_null) => QRef::Shared(not_null), [INFO] [stderr] 273 | | &KeyCompare::OnlyCompare(q) => QRef::Borrow(q), [INFO] [stderr] 274 | | } [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] 270 | match *self { [INFO] [stderr] 271 | KeyCompare::Owned(ref owned) => QRef::Owned(owned), [INFO] [stderr] 272 | KeyCompare::Shared(ref not_null) => QRef::Shared(not_null), [INFO] [stderr] 273 | KeyCompare::OnlyCompare(q) => QRef::Borrow(q), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:287:9 [INFO] [stderr] | [INFO] [stderr] 287 | / match self { [INFO] [stderr] 288 | | &QRef::Owned(not_null) => QRef2::Shared(&**not_null), [INFO] [stderr] 289 | | &QRef::Shared(&KeySlot::Key(ref k)) => QRef2::Shared(k), [INFO] [stderr] 290 | | &QRef::Shared(&KeySlot::SeeNewTable) => [INFO] [stderr] 291 | | unreachable!("KeyCompare must contain a `NotNull(KeySlot::Key(K))`"), [INFO] [stderr] 292 | | &QRef::Borrow(q) => QRef2::Borrow(q), [INFO] [stderr] 293 | | } [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] 287 | match *self { [INFO] [stderr] 288 | QRef::Owned(not_null) => QRef2::Shared(&**not_null), [INFO] [stderr] 289 | QRef::Shared(&KeySlot::Key(ref k)) => QRef2::Shared(k), [INFO] [stderr] 290 | QRef::Shared(&KeySlot::SeeNewTable) => [INFO] [stderr] 291 | unreachable!("KeyCompare must contain a `NotNull(KeySlot::Key(K))`"), [INFO] [stderr] 292 | QRef::Borrow(q) => QRef2::Borrow(q), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:305:9 [INFO] [stderr] | [INFO] [stderr] 305 | / match self { [INFO] [stderr] 306 | | &QRef2::Shared(k) => k.borrow(), [INFO] [stderr] 307 | | &QRef2::Borrow(q) => q, [INFO] [stderr] 308 | | } [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] 305 | match *self { [INFO] [stderr] 306 | QRef2::Shared(k) => k.borrow(), [INFO] [stderr] 307 | QRef2::Borrow(q) => q, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:330:9 [INFO] [stderr] | [INFO] [stderr] 330 | / match self { [INFO] [stderr] 331 | | &PutValue::Owned(ref owned) => if let ValueSlot::Tombstone = **owned { [INFO] [stderr] 332 | | true [INFO] [stderr] 333 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 342 | | }, [INFO] [stderr] 343 | | } [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] 330 | match *self { [INFO] [stderr] 331 | PutValue::Owned(ref owned) => if let ValueSlot::Tombstone = **owned { [INFO] [stderr] 332 | true [INFO] [stderr] 333 | } else { [INFO] [stderr] 334 | false [INFO] [stderr] 335 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:337:17 [INFO] [stderr] | [INFO] [stderr] 337 | / if let &ValueSlot::Tombstone = &**not_null { [INFO] [stderr] 338 | | true [INFO] [stderr] 339 | | } else { [INFO] [stderr] 340 | | false [INFO] [stderr] 341 | | } [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] 337 | if let ValueSlot::Tombstone = **not_null { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/map_inner.rs:347:9 [INFO] [stderr] | [INFO] [stderr] 347 | / if (&*value as *const _) == self.as_raw() { [INFO] [stderr] 348 | | true [INFO] [stderr] 349 | | } else { [INFO] [stderr] 350 | | false [INFO] [stderr] 351 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `(&*value as *const _) == self.as_raw()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:355:9 [INFO] [stderr] | [INFO] [stderr] 355 | / match self { [INFO] [stderr] 356 | | &PutValue::Owned(ref not_null) => &**not_null as *const _, [INFO] [stderr] 357 | | &PutValue::Shared(ref not_null) => &**not_null as *const _, [INFO] [stderr] 358 | | } [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] 355 | match *self { [INFO] [stderr] 356 | PutValue::Owned(ref not_null) => &**not_null as *const _, [INFO] [stderr] 357 | PutValue::Shared(ref not_null) => &**not_null as *const _, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/map_inner.rs:453:44 [INFO] [stderr] | [INFO] [stderr] 453 | } else if result > upper_bound { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 454 | | upper_bound [INFO] [stderr] 455 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/map_inner.rs:451:53 [INFO] [stderr] | [INFO] [stderr] 451 | if first != 0 && result/first != second { [INFO] [stderr] | _____________________________________________________^ [INFO] [stderr] 452 | | upper_bound [INFO] [stderr] 453 | | } else if result > upper_bound { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 44 [INFO] [stderr] --> src/map_inner.rs:565:5 [INFO] [stderr] | [INFO] [stderr] 565 | / pub fn copy_slot( [INFO] [stderr] 566 | | &self, [INFO] [stderr] 567 | | new_map: &Self, [INFO] [stderr] 568 | | old_map_index: usize, [INFO] [stderr] ... | [INFO] [stderr] 804 | | return; [INFO] [stderr] 805 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:591:35 [INFO] [stderr] | [INFO] [stderr] 591 | debug_assert!(if let &KeySlot::SeeNewTable = &*_new_key {true} else {false}); [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] 591 | debug_assert!(if let KeySlot::SeeNewTable = *_new_key {true} else {false}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:604:29 [INFO] [stderr] | [INFO] [stderr] 604 | / match k.deref() { [INFO] [stderr] 605 | | &KeySlot::SeeNewTable => return, [INFO] [stderr] 606 | | &KeySlot::Key(_) => { [INFO] [stderr] 607 | | debug_assert!(current.as_option().is_some()); [INFO] [stderr] ... | [INFO] [stderr] 610 | | }, [INFO] [stderr] 611 | | } [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] 604 | match *k.deref() { [INFO] [stderr] 605 | KeySlot::SeeNewTable => return, [INFO] [stderr] 606 | KeySlot::Key(_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:664:35 [INFO] [stderr] | [INFO] [stderr] 664 | Some(not_null) => match not_null.deref() { [INFO] [stderr] | ___________________________________^ [INFO] [stderr] 665 | | // Some other thread copied the slot already. Nothing to do or free here. [INFO] [stderr] 666 | | &ValueSlot::SeeNewTable => return, [INFO] [stderr] 667 | | &ValueSlot::Tombstone => { [INFO] [stderr] ... | [INFO] [stderr] 723 | | } [INFO] [stderr] 724 | | } [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] 664 | Some(not_null) => match *not_null.deref() { [INFO] [stderr] 665 | // Some other thread copied the slot already. Nothing to do or free here. [INFO] [stderr] 666 | ValueSlot::SeeNewTable => return, [INFO] [stderr] 667 | ValueSlot::Tombstone => { [INFO] [stderr] 668 | match atomic_value_slot.compare_and_set_owned( [INFO] [stderr] 669 | old_value, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:737:25 [INFO] [stderr] | [INFO] [stderr] 737 | let put_value = match not_null_old_value.deref() { [INFO] [stderr] | _________________________^ [INFO] [stderr] 738 | | &ValueSlot::Value(_) => PutValue::Shared(not_null_old_value), [INFO] [stderr] 739 | | &ValueSlot::ValuePrime(v) => match v { [INFO] [stderr] 740 | | &ValueSlot::Value(_) => [INFO] [stderr] ... | [INFO] [stderr] 747 | | &ValueSlot::SeeNewTable => unreachable!(), [INFO] [stderr] 748 | | }; [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] 737 | let put_value = match *not_null_old_value.deref() { [INFO] [stderr] 738 | ValueSlot::Value(_) => PutValue::Shared(not_null_old_value), [INFO] [stderr] 739 | ValueSlot::ValuePrime(v) => match v { [INFO] [stderr] 740 | &ValueSlot::Value(_) => [INFO] [stderr] 741 | PutValue::Shared(MaybeNull::from_shared(Shared::from(v as *const _)) [INFO] [stderr] 742 | .as_option().expect("v is a reference and can't be null") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:739:42 [INFO] [stderr] | [INFO] [stderr] 739 | &ValueSlot::ValuePrime(v) => match v { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 740 | | &ValueSlot::Value(_) => [INFO] [stderr] 741 | | PutValue::Shared(MaybeNull::from_shared(Shared::from(v as *const _)) [INFO] [stderr] 742 | | .as_option().expect("v is a reference and can't be null") [INFO] [stderr] 743 | | ), [INFO] [stderr] 744 | | _ => unreachable!("`ValuePrime` can only be a reference to a `Value`"), [INFO] [stderr] 745 | | } [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] 739 | &ValueSlot::ValuePrime(v) => match *v { [INFO] [stderr] 740 | ValueSlot::Value(_) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:912:13 [INFO] [stderr] | [INFO] [stderr] 912 | / match &*atomic_key_slot.load(&guard).as_option()? { [INFO] [stderr] 913 | | &KeySlot::Key(ref k) => if self.keys_are_equal(k, key) { [INFO] [stderr] 914 | | match atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | | &ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] ... | [INFO] [stderr] 932 | | }, [INFO] [stderr] 933 | | } [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] 912 | match *atomic_key_slot.load(&guard).as_option()? { [INFO] [stderr] 913 | KeySlot::Key(ref k) => if self.keys_are_equal(k, key) { [INFO] [stderr] 914 | match atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | &ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] 916 | &ValueSlot::Tombstone => return None, [INFO] [stderr] 917 | &ValueSlot::ValuePrime(_) | &ValueSlot::SeeNewTable => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/map_inner.rs:914:21 [INFO] [stderr] | [INFO] [stderr] 914 | / match atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | | &ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] 916 | | &ValueSlot::Tombstone => return None, [INFO] [stderr] 917 | | &ValueSlot::ValuePrime(_) | &ValueSlot::SeeNewTable => { [INFO] [stderr] ... | [INFO] [stderr] 920 | | } [INFO] [stderr] 921 | | } [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] 914 | match *atomic_value_slot.load(&guard).as_option()?.deref() { [INFO] [stderr] 915 | ValueSlot::Value(ref v) => return Some(&v), [INFO] [stderr] 916 | ValueSlot::Tombstone => return None, [INFO] [stderr] 917 | ValueSlot::ValuePrime(_) | ValueSlot::SeeNewTable => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/map_inner.rs:1065:13 [INFO] [stderr] | [INFO] [stderr] 1065 | / match &*current_key { [INFO] [stderr] 1066 | | &KeySlot::Key(ref current_key) => if self.keys_are_equal(key.as_qref().as_qref2().as_q(), current_key.borrow()) { [INFO] [stderr] 1067 | | key_index = Some(index); [INFO] [stderr] 1068 | | break 'find_key_loop; [INFO] [stderr] ... | [INFO] [stderr] 1072 | | }, [INFO] [stderr] 1073 | | } [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] 1065 | match *current_key { [INFO] [stderr] 1066 | KeySlot::Key(ref current_key) => if self.keys_are_equal(key.as_qref().as_qref2().as_q(), current_key.borrow()) { [INFO] [stderr] 1067 | key_index = Some(index); [INFO] [stderr] 1068 | break 'find_key_loop; [INFO] [stderr] 1069 | }, // else continue [INFO] [stderr] 1070 | KeySlot::SeeNewTable => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: item `LockFreeHashMap<'v, K, V>` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/lib.rs:77:1 [INFO] [stderr] | [INFO] [stderr] 77 | / impl<'guard, 'v: 'guard, K: Hash + Eq + 'guard, V: PartialEq> LockFreeHashMap<'v,K,V> { [INFO] [stderr] 78 | | [INFO] [stderr] 79 | | /// Creates a new `LockFreeHashMap`. [INFO] [stderr] 80 | | /// [INFO] [stderr] ... | [INFO] [stderr] 275 | | } [INFO] [stderr] 276 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `LockFreeHashMap<'v, K, V>` [INFO] [stderr] --> src/lib.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | / pub fn new() -> Self { [INFO] [stderr] 88 | | Self::with_capacity(Self::DEFAULT_CAPACITY) [INFO] [stderr] 89 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 77 | impl Default for LockFreeHashMap<'v, K, V> { [INFO] [stderr] 78 | fn default() -> Self { [INFO] [stderr] 79 | Self::new() [INFO] [stderr] 80 | } [INFO] [stderr] 81 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/lib.rs:353:9 [INFO] [stderr] | [INFO] [stderr] 353 | / let mut one = ""; [INFO] [stderr] 354 | | if size > 1 { [INFO] [stderr] 355 | | one = map.get(&1, &test_guard).expect("map should have at least one"); [INFO] [stderr] 356 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let one = if size > 1 { map.get(&1, &test_guard).expect("map should have at least one") } else { "" };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [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: an inclusive range would be more readable [INFO] [stderr] --> src/lib.rs:349:22 [INFO] [stderr] | [INFO] [stderr] 349 | for j in 0..(i+1) { [INFO] [stderr] | ^^^^^^^^ help: use: `0..=i` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/lib.rs:387:18 [INFO] [stderr] | [INFO] [stderr] 387 | .expect(&format!("NumberWithDrop failed: number={}", self.number)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("NumberWithDrop failed: number={}", self.number))` [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] error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. [INFO] [stderr] --> src/lib.rs:408:8 [INFO] [stderr] | [INFO] [stderr] 408 | drop(map); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::drop_ref)] on by default [INFO] [stderr] note: argument has type &LockFreeHashMap<'_, u32, std::vec::Vec> [INFO] [stderr] --> src/lib.rs:408:13 [INFO] [stderr] | [INFO] [stderr] 408 | drop(map); [INFO] [stderr] | ^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drop_ref [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `lockfreehashmap`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "742bfb9b44be410508e7f027dbafe1ae3dc6bbeae067a355e5fcc4febfe280cc"` [INFO] running `"docker" "rm" "-f" "742bfb9b44be410508e7f027dbafe1ae3dc6bbeae067a355e5fcc4febfe280cc"` [INFO] [stdout] 742bfb9b44be410508e7f027dbafe1ae3dc6bbeae067a355e5fcc4febfe280cc