about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTommy Ip <hkmp7tommy@gmail.com>2017-06-06 09:06:56 +0100
committerTommy Ip <hkmp7tommy@gmail.com>2017-06-06 09:06:56 +0100
commit94c808c1d3fbf6f73b2bfdb8d6fbcad1d260fe64 (patch)
treecb6554617f69b981eb586741fdd2c3bf45785379
parent9cbb5f9a245f859c94d90acebef02adbc4a807e3 (diff)
downloadrust-94c808c1d3fbf6f73b2bfdb8d6fbcad1d260fe64.tar.gz
rust-94c808c1d3fbf6f73b2bfdb8d6fbcad1d260fe64.zip
Update closure errors to emit context for FnMut
It now handles both FnMut and FnOnce case.
-rw-r--r--src/librustc/traits/error_reporting.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs
index e29e4786671..73753382a7c 100644
--- a/src/librustc/traits/error_reporting.rs
+++ b/src/librustc/traits/error_reporting.rs
@@ -657,13 +657,18 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
                         };
 
                         if let Some(tables) = infer_tables {
-                            if let Some(&(ty::ClosureKind::FnOnce, Some((span, name)))) =
-                                tables.closure_kinds.get(&node_id)
-                            {
-                                err.span_note(
-                                    span,
-                                    &format!("closure is `FnOnce` because it moves the \
-                                              variable `{}` out of its environment", name));
+                            match tables.closure_kinds.get(&node_id) {
+                                Some(&(ty::ClosureKind::FnOnce, Some((span, name)))) => {
+                                    err.span_note(span, &format!(
+                                        "closure is `FnOnce` because it moves the \
+                                         variable `{}` out of its environment", name));
+                                },
+                                Some(&(ty::ClosureKind::FnMut, Some((span, name)))) => {
+                                    err.span_note(span, &format!(
+                                        "closure is `FnMut` because it mutates the \
+                                         variable `{}` here", name));
+                                },
+                                _ => {}
                             }
                         } else {
                             err.span_note(