about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSeo Sanghyeon <sanxiyn@gmail.com>2015-11-03 19:04:36 +0900
committerSeo Sanghyeon <sanxiyn@gmail.com>2015-11-03 19:04:36 +0900
commit61e5b6dfdbb34d9569ebddc6af09cb5a5beb605a (patch)
tree73ae8359e82004793d77845af920c06bd4399cc0
parentb7fbfb658e0e3e3be37c5b6704fd6b4d5991ae8c (diff)
downloadrust-61e5b6dfdbb34d9569ebddc6af09cb5a5beb605a.tar.gz
rust-61e5b6dfdbb34d9569ebddc6af09cb5a5beb605a.zip
Warn unused_assignments for arguments
-rw-r--r--src/librustc/middle/liveness.rs20
-rw-r--r--src/test/compile-fail/liveness-dead.rs10
2 files changed, 26 insertions, 4 deletions
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs
index 3b56597d353..b25ad66fd1f 100644
--- a/src/librustc/middle/liveness.rs
+++ b/src/librustc/middle/liveness.rs
@@ -1555,7 +1555,11 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
                 // Ignore unused self.
                 let name = path1.node;
                 if name != special_idents::self_.name {
-                    self.warn_about_unused(sp, p_id, entry_ln, var);
+                    if !self.warn_about_unused(sp, p_id, entry_ln, var) {
+                        if self.live_on_entry(entry_ln, var).is_none() {
+                            self.report_dead_assign(p_id, sp, var, true);
+                        }
+                    }
                 }
             })
         }
@@ -1609,11 +1613,19 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
                               ln: LiveNode,
                               var: Variable) {
         if self.live_on_exit(ln, var).is_none() {
-            let r = self.should_warn(var);
-            if let Some(name) = r {
+            self.report_dead_assign(id, sp, var, false);
+        }
+    }
+
+    fn report_dead_assign(&self, id: NodeId, sp: Span, var: Variable, is_argument: bool) {
+        if let Some(name) = self.should_warn(var) {
+            if is_argument {
+                self.ir.tcx.sess.add_lint(lint::builtin::UNUSED_ASSIGNMENTS, id, sp,
+                    format!("value passed to `{}` is never read", name));
+            } else {
                 self.ir.tcx.sess.add_lint(lint::builtin::UNUSED_ASSIGNMENTS, id, sp,
                     format!("value assigned to `{}` is never read", name));
             }
         }
     }
- }
+}
diff --git a/src/test/compile-fail/liveness-dead.rs b/src/test/compile-fail/liveness-dead.rs
index dc7b0fc4fd0..ddd8fc68c43 100644
--- a/src/test/compile-fail/liveness-dead.rs
+++ b/src/test/compile-fail/liveness-dead.rs
@@ -27,4 +27,14 @@ fn f3() {
     x = 4; //~ ERROR: value assigned to `x` is never read
 }
 
+fn f4(mut x: i32) { //~ ERROR: value passed to `x` is never read
+    x = 4;
+    x.clone();
+}
+
+fn f5(mut x: i32) {
+    x.clone();
+    x = 4; //~ ERROR: value assigned to `x` is never read
+}
+
 fn main() {}