about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2018-01-09 19:10:45 -0800
committerEsteban Küber <esteban@kuber.com.ar>2018-01-10 11:41:12 -0800
commit90bc98c5d1f58659b8aaa50e8505919215771b4a (patch)
tree7ea74cc751626752229377e67511c96b85e9bc76
parent18908184de3d6f29c8bd2a364b105fd89a7f0377 (diff)
downloadrust-90bc98c5d1f58659b8aaa50e8505919215771b4a.tar.gz
rust-90bc98c5d1f58659b8aaa50e8505919215771b4a.zip
Modify message to match label
-rw-r--r--src/librustc_borrowck/borrowck/mod.rs1
-rw-r--r--src/librustc_mir/borrow_check/error_reporting.rs30
-rw-r--r--src/librustc_mir/util/borrowck_errors.rs11
-rw-r--r--src/test/compile-fail/issue-45199.rs2
-rw-r--r--src/test/ui/borrowck/immutable-arg.rs2
-rw-r--r--src/test/ui/borrowck/immutable-arg.stderr2
6 files changed, 30 insertions, 18 deletions
diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs
index 61ca37afae9..4529e4bab75 100644
--- a/src/librustc_borrowck/borrowck/mod.rs
+++ b/src/librustc_borrowck/borrowck/mod.rs
@@ -772,6 +772,7 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
                                                 &move_data::Assignment) {
         let mut err = self.cannot_reassign_immutable(span,
                                                      &self.loan_path_to_string(lp),
+                                                     false,
                                                      Origin::Ast);
         err.span_label(span, "cannot assign twice to immutable variable");
         if span != assign.span {
diff --git a/src/librustc_mir/borrow_check/error_reporting.rs b/src/librustc_mir/borrow_check/error_reporting.rs
index 94308554814..a3c1a4bd88c 100644
--- a/src/librustc_mir/borrow_check/error_reporting.rs
+++ b/src/librustc_mir/borrow_check/error_reporting.rs
@@ -568,25 +568,31 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
         (place, span): (&Place<'tcx>, Span),
         assigned_span: Span,
     ) {
+        let is_arg = if let Place::Local(local) = place {
+            if let LocalKind::Arg = self.mir.local_kind(*local) {
+                true
+            } else {
+                false
+            }
+        } else {
+            false
+        };
+
         let mut err = self.tcx.cannot_reassign_immutable(
             span,
             &self.describe_place(place).unwrap_or("_".to_owned()),
+            is_arg,
             Origin::Mir,
         );
-        let mut msg = "cannot assign twice to immutable variable";
+        let msg = if is_arg {
+            "cannot assign to immutable argument"
+        } else {
+            "cannot assign twice to immutable variable"
+        };
         if span != assigned_span {
-            let suggestion = if let Place::Local(local) = place {
-                if let LocalKind::Arg = self.mir.local_kind(*local) {
-                    msg = "cannot assign to immutable argument";
-                    err.span_label(assigned_span, "argument not declared as `mut`");
-                    true
-                } else {
-                    false
-                }
+            if is_arg {
+                err.span_label(assigned_span, "argument not declared as `mut`");
             } else {
-                false
-            };
-            if !suggestion {
                 let value_msg = match self.describe_place(place) {
                     Some(name) => format!("`{}`", name),
                     None => "value".to_owned(),
diff --git a/src/librustc_mir/util/borrowck_errors.rs b/src/librustc_mir/util/borrowck_errors.rs
index 38227bd7133..4a7ee397aec 100644
--- a/src/librustc_mir/util/borrowck_errors.rs
+++ b/src/librustc_mir/util/borrowck_errors.rs
@@ -269,12 +269,17 @@ pub trait BorrowckErrors {
         self.cancel_if_wrong_origin(err, o)
     }
 
-    fn cannot_reassign_immutable(&self, span: Span, desc: &str, o: Origin)
+    fn cannot_reassign_immutable(&self, span: Span, desc: &str, is_arg: bool, o: Origin)
                                  -> DiagnosticBuilder
     {
+        let msg = if is_arg {
+            "to immutable argument"
+        } else {
+            "twice to immutable variable"
+        };
         let err = struct_span_err!(self, span, E0384,
-                                   "cannot assign twice to immutable variable `{}`{OGN}",
-                                   desc, OGN=o);
+                                   "cannot assign {} `{}`{OGN}",
+                                   msg, desc, OGN=o);
 
         self.cancel_if_wrong_origin(err, o)
     }
diff --git a/src/test/compile-fail/issue-45199.rs b/src/test/compile-fail/issue-45199.rs
index b4468653e80..ecddb4c101f 100644
--- a/src/test/compile-fail/issue-45199.rs
+++ b/src/test/compile-fail/issue-45199.rs
@@ -33,7 +33,7 @@ fn test_call() {
 fn test_args(b: Box<i32>) {  //[ast]~ NOTE first assignment
                                 //[mir]~^ NOTE argument not declared as `mut`
     b = Box::new(2);            //[ast]~ ERROR cannot assign twice to immutable variable
-                                //[mir]~^ ERROR cannot assign twice to immutable variable `b`
+                                //[mir]~^ ERROR cannot assign to immutable argument `b`
                                 //[ast]~| NOTE cannot assign twice to immutable
                                 //[mir]~| NOTE cannot assign to immutable argument
 }
diff --git a/src/test/ui/borrowck/immutable-arg.rs b/src/test/ui/borrowck/immutable-arg.rs
index ea3a95bd573..7c387ed0808 100644
--- a/src/test/ui/borrowck/immutable-arg.rs
+++ b/src/test/ui/borrowck/immutable-arg.rs
@@ -12,7 +12,7 @@
 
 fn foo(_x: u32) {
     _x = 4;
-    //~^ ERROR cannot assign twice to immutable variable `_x` (Mir)
+    //~^ ERROR cannot assign to immutable argument `_x` (Mir)
     //~^^ ERROR cannot assign twice to immutable variable `_x` (Ast)
 }
 
diff --git a/src/test/ui/borrowck/immutable-arg.stderr b/src/test/ui/borrowck/immutable-arg.stderr
index a83addc8c65..40e1878f732 100644
--- a/src/test/ui/borrowck/immutable-arg.stderr
+++ b/src/test/ui/borrowck/immutable-arg.stderr
@@ -6,7 +6,7 @@ error[E0384]: cannot assign twice to immutable variable `_x` (Ast)
 14 |     _x = 4;
    |     ^^^^^^ cannot assign twice to immutable variable
 
-error[E0384]: cannot assign twice to immutable variable `_x` (Mir)
+error[E0384]: cannot assign to immutable argument `_x` (Mir)
   --> $DIR/immutable-arg.rs:14:5
    |
 13 | fn foo(_x: u32) {