rust-clippy/tests/ui/bit_masks.rs

72 lines
2 KiB
Rust
Raw Normal View History

2018-10-06 16:18:06 +00:00
// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
2018-07-28 15:34:52 +00:00
#![feature(tool_lints)]
2017-09-18 10:47:33 +00:00
const THREE_BITS : i64 = 7;
const EVEN_MORE_REDIRECTION : i64 = THREE_BITS;
2018-07-28 15:34:52 +00:00
#[warn(clippy::bad_bit_mask)]
#[allow(clippy::ineffective_bit_mask, clippy::identity_op, clippy::no_effect, clippy::unnecessary_operation)]
fn main() {
let x = 5;
2017-02-08 13:58:07 +00:00
x & 0 == 0;
x & 1 == 1; //ok, distinguishes bit 0
x & 1 == 0; //ok, compared with zero
2017-02-08 13:58:07 +00:00
x & 2 == 1;
x | 0 == 0; //ok, equals x == 0 (maybe warn?)
x | 1 == 3; //ok, equals x == 2 || x == 3
x | 3 == 3; //ok, equals x <= 3
2017-02-08 13:58:07 +00:00
x | 3 == 2;
2017-02-08 13:58:07 +00:00
x & 1 > 1;
x & 2 > 1; // ok, distinguishes x & 2 == 2 from x & 2 == 0
x & 2 < 1; // ok, distinguishes x & 2 == 2 from x & 2 == 0
x | 1 > 1; // ok (if a bit silly), equals x > 1
2017-02-08 13:58:07 +00:00
x | 2 > 1;
x | 2 <= 2; // ok (if a bit silly), equals x <= 2
2015-09-06 14:09:35 +00:00
x & 192 == 128; // ok, tests for bit 7 and not bit 6
x & 0xffc0 == 0xfe80; // ok
2015-09-28 05:11:03 +00:00
// this also now works with constants
2017-02-08 13:58:07 +00:00
x & THREE_BITS == 8;
x | EVEN_MORE_REDIRECTION < 7;
2017-02-08 13:58:07 +00:00
0 & x == 0;
1 | x > 1;
// and should now also match uncommon usage
2017-02-08 13:58:07 +00:00
1 < 2 | x;
2 == 3 | x;
1 == x & 2;
x | 1 > 2; // no error, because we allowed ineffective bit masks
ineffective();
2015-05-15 12:09:29 +00:00
}
2018-07-28 15:34:52 +00:00
#[warn(clippy::ineffective_bit_mask)]
#[allow(clippy::bad_bit_mask, clippy::no_effect, clippy::unnecessary_operation)]
2015-05-15 12:09:29 +00:00
fn ineffective() {
let x = 5;
2017-02-08 13:58:07 +00:00
x | 1 > 3;
x | 1 < 4;
x | 1 <= 3;
x | 1 >= 8;
2015-08-19 07:07:50 +00:00
x | 1 > 2; // not an error (yet), better written as x >= 2
x | 1 >= 7; // not an error (yet), better written as x >= 6
x | 3 > 4; // not an error (yet), better written as x >= 4
x | 4 <= 19;
}