about summary refs log tree commit diff
path: root/tests/ui/liveness/liveness-unused.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/liveness/liveness-unused.rs')
-rw-r--r--tests/ui/liveness/liveness-unused.rs141
1 files changed, 141 insertions, 0 deletions
diff --git a/tests/ui/liveness/liveness-unused.rs b/tests/ui/liveness/liveness-unused.rs
new file mode 100644
index 00000000000..9c7be15fcc8
--- /dev/null
+++ b/tests/ui/liveness/liveness-unused.rs
@@ -0,0 +1,141 @@
+#![warn(unused)]
+#![deny(unused_variables)]
+#![deny(unused_assignments)]
+#![allow(dead_code, non_camel_case_types, trivial_numeric_casts)]
+
+use std::ops::AddAssign;
+
+fn f1(x: isize) {
+    //~^ ERROR unused variable: `x`
+}
+
+fn f1b(x: &mut isize) {
+    //~^ ERROR unused variable: `x`
+}
+
+#[allow(unused_variables)]
+fn f1c(x: isize) {}
+
+fn f1d() {
+    let x: isize;
+    //~^ ERROR unused variable: `x`
+}
+
+fn f2() {
+    let x = 3;
+    //~^ ERROR unused variable: `x`
+}
+
+fn f3() {
+    let mut x = 3;
+    //~^ ERROR variable `x` is assigned to, but never used
+    x += 4;
+    //~^ ERROR value assigned to `x` is never read
+}
+
+fn f3b() {
+    let mut z = 3;
+    //~^ ERROR variable `z` is assigned to, but never used
+    loop {
+        z += 4;
+    }
+}
+
+#[allow(unused_variables)]
+fn f3c() {
+    let mut z = 3;
+    loop { z += 4; }
+}
+
+#[allow(unused_variables)]
+#[allow(unused_assignments)]
+fn f3d() {
+    let mut x = 3;
+    x += 4;
+}
+
+fn f4() {
+    match Some(3) {
+      Some(i) => {
+        //~^ ERROR unused variable: `i`
+      }
+      None => {}
+    }
+}
+
+enum tri {
+    a(isize), b(isize), c(isize)
+}
+
+fn f4b() -> isize {
+    match tri::a(3) {
+      tri::a(i) | tri::b(i) | tri::c(i) => {
+        i
+      }
+    }
+}
+
+fn f5a() {
+    for x in 1..10 { }
+    //~^ ERROR unused variable: `x`
+}
+
+fn f5b() {
+    for (x, _) in [1, 2, 3].iter().enumerate() { }
+    //~^ ERROR unused variable: `x`
+}
+
+fn f5c() {
+    for (_, x) in [1, 2, 3].iter().enumerate() {
+    //~^ ERROR unused variable: `x`
+        continue;
+        drop(*x as i32); //~ WARNING unreachable statement
+    }
+}
+
+struct View<'a>(&'a mut [i32]);
+
+impl<'a> AddAssign<i32> for View<'a> {
+    fn add_assign(&mut self, rhs: i32) {
+        for lhs in self.0.iter_mut() {
+            *lhs += rhs;
+        }
+    }
+}
+
+fn f6() {
+    let mut array = [1, 2, 3];
+    let mut v = View(&mut array);
+
+    // ensure an error shows up for x even if lhs of an overloaded add assign
+
+    let x;
+    //~^ ERROR variable `x` is assigned to, but never used
+
+    *({
+        x = 0;  //~ ERROR value assigned to `x` is never read
+        &mut v
+    }) += 1;
+}
+
+
+struct MutRef<'a>(&'a mut i32);
+
+impl<'a> AddAssign<i32> for MutRef<'a> {
+    fn add_assign(&mut self, rhs: i32) {
+        *self.0 += rhs;
+    }
+}
+
+fn f7() {
+    let mut a = 1;
+    {
+        // `b` does not trigger unused_variables
+        let mut b = MutRef(&mut a);
+        b += 1;
+    }
+    drop(a);
+}
+
+fn main() {
+}