-#![feature(plugin)]
-#![plugin(clippy)]
+#![warn(clippy::integer_arithmetic, clippy::float_arithmetic)]
+#![allow(
+ unused,
+ clippy::shadow_reuse,
+ clippy::shadow_unrelated,
+ clippy::no_effect,
+ clippy::unnecessary_operation
+)]
-#![deny(integer_arithmetic, float_arithmetic)]
-#![allow(unused, shadow_reuse, shadow_unrelated, no_effect, unnecessary_operation)]
+#[rustfmt::skip]
fn main() {
let i = 1i32;
- 1 + i; //~ERROR integer arithmetic detected
- i * 2; //~ERROR integer arithmetic detected
- 1 % //~ERROR integer arithmetic detected
+ 1 + i;
+ i * 2;
+ 1 %
i / 2; // no error, this is part of the expression in the preceding line
- i - 2 + 2 - i; //~ERROR integer arithmetic detected
- -i; //~ERROR integer arithmetic detected
+ i - 2 + 2 - i;
+ -i;
+
+ // no error, overflows are checked by `overflowing_literals`
+ -1;
+ -(-1);
i & 1; // no wrapping
i | 1;
let f = 1.0f32;
- f * 2.0; //~ERROR floating-point arithmetic detected
+ f * 2.0;
+
+ 1.0 + f;
+ f * 2.0;
+ f / 2.0;
+ f - 2.0 * 4.2;
+ -f;
+
+ // No errors for the following items because they are constant expressions
+ enum Foo {
+ Bar = -2,
+ }
+ struct Baz([i32; 1 + 1]);
+ union Qux {
+ field: [i32; 1 + 1],
+ }
+ type Alias = [i32; 1 + 1];
+
+ const FOO: i32 = -2;
+ static BAR: i32 = -2;
+
+ let _: [i32; 1 + 1] = [0, 0];
+
+ let _: [i32; 1 + 1] = {
+ let a: [i32; 1 + 1] = [0, 0];
+ a
+ };
+
+ trait Trait {
+ const ASSOC: i32 = 1 + 1;
+ }
- 1.0 + f; //~ERROR floating-point arithmetic detected
- f * 2.0; //~ERROR floating-point arithmetic detected
- f / 2.0; //~ERROR floating-point arithmetic detected
- f - 2.0 * 4.2; //~ERROR floating-point arithmetic detected
- -f; //~ERROR floating-point arithmetic detected
+ impl Trait for Foo {
+ const ASSOC: i32 = {
+ let _: [i32; 1 + 1];
+ fn foo() {}
+ 1 + 1
+ };
+ }
}