Clippy lints / Correctness
Clippy lint · Correctness · checked with Clippy 0.1.99
clippy::ineffective_bit_mask: Checks for bit masks in comparisons which can be removed without changing the outcome
What it meansChecks for bit masks in comparisons which can be removed without changing the outcome. The basic structure can be seen in the following table: ComparisonBit OpExampleequals > / <=| / ^x | 2 > 3x > 3 < / >=| / ^x ^ 1 < 4x < 4 It is in the correctness group and denied by default (the build fails).
Does it matter?
Not equally evil as bad_bit_mask, but still a bit misleading, because the bit mask is ineffective.
Code that is almost certainly wrong. Denied by default: the build fails until you fix it or allow it.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
if (x | 1 > 3) { }
Write this instead
if (x >= 2) { }
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::ineffective_bit_mask)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
ineffective_bit_mask = "allow"One run
cargo clippy -- -A clippy::ineffective-bit-maskThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks for bit masks in comparisons which can be removed without changing the outcome. The basic structure can be seen in the following table:
| Comparison | Bit Op | Example | equals |
|---|---|---|---|
> / <= | | / ^ | x | 2 > 3 | x > 3 |
< / >= | | / ^ | x ^ 1 < 4 | x < 4 |
Why is this bad?
Not equally evil as bad_bit_mask,
but still a bit misleading, because the bit mask is ineffective.
Known problems
False negatives: This lint will only match instances
where we have figured out the math (which is for a power-of-two compared
value). This means things like x | 1 >= 7 (which would be better written
as x >= 6) will not be reported (but bit masks like this are fairly
uncommon).
Example
if (x | 1 > 3) { }
Use instead:
if (x >= 2) { }
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- bad_bit_maskChecks for incompatible bit masks in comparisons. The formula for detecting if an expression of the type _ <bit_op> m <cmp_op> c (where <bit_op> is one of {&, |} and <cmp_op> is one of {!=, >=, >, !=, >=, >}) can be determined from the following table: ComparisonBit OpExampleis alwaysFormula == or !=&x & 2 == 3falsec & m != c < or >=&x & 2 < 3truem < c > or <=&x & 1 > 1falsem <= c == or !=|x | 1 == 0falsec | m != c < or >=|x | 1 < 1falsem >= c <= or >|x | 1 > 0truem > c
- ifs_same_condChecks for consecutive ifs with the same condition
- impl_hash_borrow_with_str_and_bytesthe semantics of `Borrow<T>` around `Hash` can't be satisfied when both `Borrow<str>` and `Borrow<[u8]>` are implemented
- impossible_comparisonsChecks for double comparisons that can never succeed
- infinite_iterinfinite iteration detected
- inherent_to_string_shadow_displaytype `main::A` implements inherent method `to_string(&self) -> String` which shadows the implementation of `Display`
- inline_fn_without_bodyuse of `#[inline]` on trait method `name` which has no body
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::bad_bit_maskChecks for incompatible bit masks in comparisons. The formula for detecting if an expression of the type _ <bit_op> m <cmp_op> c (where <bit_op> is one of {&, |} and <cmp_op> is one of {!=, >=, >, !=, >=, >}) can be determined from the following table: ComparisonBit OpExampleis alwaysFormula == or !=&x & 2 == 3falsec & m != c < or >=&x & 2 < 3truem < c > or <=&x & 1 > 1falsem <= c == or !=|x | 1 == 0falsec | m != c < or >=|x | 1 < 1falsem >= c <= or >|x | 1 > 0truem > cRead it next →Did this answer your question?