about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2016-12-26 13:27:51 -0500
committerFelix S. Klock II <pnkfelix@pnkfx.org>2017-01-03 12:35:20 -0500
commitb8669dff556a03ca37b39cbb81be65c94d24defe (patch)
tree68ccf7cd1e809b8402246107679232364278a5cb
parent0d395841fc5141462c88a4167b2f675405d3a8eb (diff)
downloadrust-b8669dff556a03ca37b39cbb81be65c94d24defe.tar.gz
rust-b8669dff556a03ca37b39cbb81be65c94d24defe.zip
Ensure type is copyable before emitting note suggesting adding manual deref.
drive-by: fix merge conflict; fix test expected error output post rebase.
-rw-r--r--src/librustc_typeck/check/op.rs5
-rw-r--r--src/test/compile-fail/binary-op-on-double-ref.rs4
-rw-r--r--src/test/compile-fail/str-concat-on-double-ref.rs1
3 files changed, 5 insertions, 5 deletions
diff --git a/src/librustc_typeck/check/op.rs b/src/librustc_typeck/check/op.rs
index 4202f65c44d..925d28247b6 100644
--- a/src/librustc_typeck/check/op.rs
+++ b/src/librustc_typeck/check/op.rs
@@ -206,8 +206,9 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
                             lhs_ty);
 
                         if let TypeVariants::TyRef(_, ref ty_mut) = lhs_ty.sty {
-                            if self.lookup_op_method(expr, ty_mut.ty, vec![rhs_ty_var],
-                                    token::intern(name), trait_def_id,
+                            if !self.infcx.type_moves_by_default(ty_mut.ty, lhs_expr.span) &&
+                                self.lookup_op_method(expr, ty_mut.ty, vec![rhs_ty_var],
+                                    Symbol::intern(name), trait_def_id,
                                     lhs_expr).is_ok() {
                                 err.span_note(
                                     lhs_expr.span,
diff --git a/src/test/compile-fail/binary-op-on-double-ref.rs b/src/test/compile-fail/binary-op-on-double-ref.rs
index 5cc8e0f9988..a49cfaa1760 100644
--- a/src/test/compile-fail/binary-op-on-double-ref.rs
+++ b/src/test/compile-fail/binary-op-on-double-ref.rs
@@ -12,9 +12,9 @@ fn main() {
     let v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
     let vr = v.iter().filter(|x| {
         x % 2 == 0
-        //~^ ERROR binary operation `%` cannot be applied to type `&&_`
+        //~^ ERROR binary operation `%` cannot be applied to type `&&{integer}`
         //~| NOTE this is a reference of type that `%` can be applied to
-        //~| NOTE an implementation of `std::ops::Rem` might be missing for `&&_`
+        //~| NOTE an implementation of `std::ops::Rem` might be missing for `&&{integer}`
     });
     println!("{:?}", vr);
 }
diff --git a/src/test/compile-fail/str-concat-on-double-ref.rs b/src/test/compile-fail/str-concat-on-double-ref.rs
index d79ab6b805c..f85422f76d4 100644
--- a/src/test/compile-fail/str-concat-on-double-ref.rs
+++ b/src/test/compile-fail/str-concat-on-double-ref.rs
@@ -13,7 +13,6 @@ fn main() {
     let b: &str = &"2";
     let c = a + b;
     //~^ ERROR binary operation `+` cannot be applied to type `&std::string::String`
-    //~| NOTE this is a reference of type that `+` can be applied to
     //~| NOTE an implementation of `std::ops::Add` might be missing for `&std::string::String`
     println!("{:?}", c);
 }