1 #![feature(tool_lints)]
4 const THREE_BITS : i64 = 7;
5 const EVEN_MORE_REDIRECTION : i64 = THREE_BITS;
7 #[warn(clippy::bad_bit_mask)]
8 #[allow(clippy::ineffective_bit_mask, clippy::identity_op, clippy::no_effect, clippy::unnecessary_operation)]
13 x & 1 == 1; //ok, distinguishes bit 0
14 x & 1 == 0; //ok, compared with zero
16 x | 0 == 0; //ok, equals x == 0 (maybe warn?)
17 x | 1 == 3; //ok, equals x == 2 || x == 3
18 x | 3 == 3; //ok, equals x <= 3
22 x & 2 > 1; // ok, distinguishes x & 2 == 2 from x & 2 == 0
23 x & 2 < 1; // ok, distinguishes x & 2 == 2 from x & 2 == 0
24 x | 1 > 1; // ok (if a bit silly), equals x > 1
26 x | 2 <= 2; // ok (if a bit silly), equals x <= 2
28 x & 192 == 128; // ok, tests for bit 7 and not bit 6
29 x & 0xffc0 == 0xfe80; // ok
31 // this also now works with constants
33 x | EVEN_MORE_REDIRECTION < 7;
38 // and should now also match uncommon usage
43 x | 1 > 2; // no error, because we allowed ineffective bit masks
47 #[warn(clippy::ineffective_bit_mask)]
48 #[allow(clippy::bad_bit_mask, clippy::no_effect, clippy::unnecessary_operation)]
57 x | 1 > 2; // not an error (yet), better written as x >= 2
58 x | 1 >= 7; // not an error (yet), better written as x >= 6
59 x | 3 > 4; // not an error (yet), better written as x >= 4