]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/arithmetic.rs
Auto merge of #4478 - tsurai:master, r=flip1995
[rust.git] / tests / ui / arithmetic.rs
index 5479c55e11e030ae824155757a22b023746dd6ec..c3cea99760683ccef2b4687eb2923c3e3a5c1004 100644 (file)
@@ -1,16 +1,25 @@
-#![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;
@@ -20,11 +29,43 @@ fn main() {
 
     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
+        };
+    }
 }