diff options
| author | hgallagher1993 <hgallagher1993@gmail.com> | 2019-03-27 13:13:09 -0400 |
|---|---|---|
| committer | hgallagher1993 <hgallagher1993@gmail.com> | 2019-03-27 13:13:09 -0400 |
| commit | 4d648ce1b936de167260ed4d11f8c3d2f6462ff0 (patch) | |
| tree | 82dc159bcfc5ec0a32ffc378147df04cf3a7927f | |
| parent | c5fb4d0d2f464bc9ab61f7693ed4dde4d9326820 (diff) | |
| download | rust-4d648ce1b936de167260ed4d11f8c3d2f6462ff0.tar.gz rust-4d648ce1b936de167260ed4d11f8c3d2f6462ff0.zip | |
Better diagnostic for binary operation on BoxedValues
30 files changed, 211 insertions, 85 deletions
diff --git a/src/librustc_typeck/check/op.rs b/src/librustc_typeck/check/op.rs index 9d883b22214..f8212659f02 100644 --- a/src/librustc_typeck/check/op.rs +++ b/src/librustc_typeck/check/op.rs @@ -327,10 +327,14 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { err.emit(); } IsAssign::No => { - let mut err = struct_span_err!(self.tcx.sess, expr.span, E0369, + let mut err = struct_span_err!(self.tcx.sess, op.span, E0369, "binary operation `{}` cannot be applied to type `{}`", op.node.as_str(), lhs_ty); + + err.span_label(lhs_expr.span, lhs_ty.to_string()); + err.span_label(rhs_expr.span, rhs_ty.to_string()); + let mut suggested_deref = false; if let Ref(_, mut rty, _) = lhs_ty.sty { if { diff --git a/src/test/ui/autoderef-full-lval.stderr b/src/test/ui/autoderef-full-lval.stderr index b92259b69df..c9f3e8b2e26 100644 --- a/src/test/ui/autoderef-full-lval.stderr +++ b/src/test/ui/autoderef-full-lval.stderr @@ -1,16 +1,20 @@ error[E0369]: binary operation `+` cannot be applied to type `std::boxed::Box<isize>` - --> $DIR/autoderef-full-lval.rs:15:20 + --> $DIR/autoderef-full-lval.rs:15:24 | LL | let z: isize = a.x + b.y; - | ^^^^^^^^^ + | --- ^ --- std::boxed::Box<isize> + | | + | std::boxed::Box<isize> | = note: an implementation of `std::ops::Add` might be missing for `std::boxed::Box<isize>` error[E0369]: binary operation `+` cannot be applied to type `std::boxed::Box<isize>` - --> $DIR/autoderef-full-lval.rs:21:25 + --> $DIR/autoderef-full-lval.rs:21:33 | LL | let answer: isize = forty.a + two.a; - | ^^^^^^^^^^^^^^^ + | ------- ^ ----- std::boxed::Box<isize> + | | + | std::boxed::Box<isize> | = note: an implementation of `std::ops::Add` might be missing for `std::boxed::Box<isize>` diff --git a/src/test/ui/binary-op-on-double-ref.stderr b/src/test/ui/binary-op-on-double-ref.stderr index f298902e3ff..d036f06a8c7 100644 --- a/src/test/ui/binary-op-on-double-ref.stderr +++ b/src/test/ui/binary-op-on-double-ref.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `%` cannot be applied to type `&&{integer}` - --> $DIR/binary-op-on-double-ref.rs:4:9 + --> $DIR/binary-op-on-double-ref.rs:4:11 | LL | x % 2 == 0 - | ^^^^^ + | - ^ - {integer} + | | + | &&{integer} | = help: `%` can be used on '{integer}', you can dereference `x`: `*x` diff --git a/src/test/ui/binop/binop-bitxor-str.stderr b/src/test/ui/binop/binop-bitxor-str.stderr index 4404fde9200..9e8992235ed 100644 --- a/src/test/ui/binop/binop-bitxor-str.stderr +++ b/src/test/ui/binop/binop-bitxor-str.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `^` cannot be applied to type `std::string::String` - --> $DIR/binop-bitxor-str.rs:3:21 + --> $DIR/binop-bitxor-str.rs:3:37 | LL | fn main() { let x = "a".to_string() ^ "b".to_string(); } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | --------------- ^ --------------- std::string::String + | | + | std::string::String | = note: an implementation of `std::ops::BitXor` might be missing for `std::string::String` diff --git a/src/test/ui/binop/binop-mul-bool.stderr b/src/test/ui/binop/binop-mul-bool.stderr index 194181b9c11..92e14bccccd 100644 --- a/src/test/ui/binop/binop-mul-bool.stderr +++ b/src/test/ui/binop/binop-mul-bool.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `*` cannot be applied to type `bool` - --> $DIR/binop-mul-bool.rs:3:21 + --> $DIR/binop-mul-bool.rs:3:26 | LL | fn main() { let x = true * false; } - | ^^^^^^^^^^^^ + | ---- ^ ----- bool + | | + | bool | = note: an implementation of `std::ops::Mul` might be missing for `bool` diff --git a/src/test/ui/binop/binop-typeck.stderr b/src/test/ui/binop/binop-typeck.stderr index 928e836c0b5..d33cff313e7 100644 --- a/src/test/ui/binop/binop-typeck.stderr +++ b/src/test/ui/binop/binop-typeck.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `bool` - --> $DIR/binop-typeck.rs:6:13 + --> $DIR/binop-typeck.rs:6:15 | LL | let z = x + y; - | ^^^^^ + | - ^ - {integer} + | | + | bool | = note: an implementation of `std::ops::Add` might be missing for `bool` diff --git a/src/test/ui/derives/derives-span-PartialEq-enum-struct-variant.stderr b/src/test/ui/derives/derives-span-PartialEq-enum-struct-variant.stderr index ed5468cc4da..673f23d29eb 100644 --- a/src/test/ui/derives/derives-span-PartialEq-enum-struct-variant.stderr +++ b/src/test/ui/derives/derives-span-PartialEq-enum-struct-variant.stderr @@ -3,6 +3,9 @@ error[E0369]: binary operation `==` cannot be applied to type `Error` | LL | x: Error | ^^^^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` @@ -11,6 +14,9 @@ error[E0369]: binary operation `!=` cannot be applied to type `Error` | LL | x: Error | ^^^^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` diff --git a/src/test/ui/derives/derives-span-PartialEq-enum.stderr b/src/test/ui/derives/derives-span-PartialEq-enum.stderr index 06a88c03f58..6ab18b45b73 100644 --- a/src/test/ui/derives/derives-span-PartialEq-enum.stderr +++ b/src/test/ui/derives/derives-span-PartialEq-enum.stderr @@ -3,6 +3,9 @@ error[E0369]: binary operation `==` cannot be applied to type `Error` | LL | Error | ^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` @@ -11,6 +14,9 @@ error[E0369]: binary operation `!=` cannot be applied to type `Error` | LL | Error | ^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` diff --git a/src/test/ui/derives/derives-span-PartialEq-struct.stderr b/src/test/ui/derives/derives-span-PartialEq-struct.stderr index b8481048361..bdd12942b47 100644 --- a/src/test/ui/derives/derives-span-PartialEq-struct.stderr +++ b/src/test/ui/derives/derives-span-PartialEq-struct.stderr @@ -3,6 +3,9 @@ error[E0369]: binary operation `==` cannot be applied to type `Error` | LL | x: Error | ^^^^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` @@ -11,6 +14,9 @@ error[E0369]: binary operation `!=` cannot be applied to type `Error` | LL | x: Error | ^^^^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` diff --git a/src/test/ui/derives/derives-span-PartialEq-tuple-struct.stderr b/src/test/ui/derives/derives-span-PartialEq-tuple-struct.stderr index 4398d252125..9f60b2ea816 100644 --- a/src/test/ui/derives/derives-span-PartialEq-tuple-struct.stderr +++ b/src/test/ui/derives/derives-span-PartialEq-tuple-struct.stderr @@ -3,6 +3,9 @@ error[E0369]: binary operation `==` cannot be applied to type `Error` | LL | Error | ^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` @@ -11,6 +14,9 @@ error[E0369]: binary operation `!=` cannot be applied to type `Error` | LL | Error | ^^^^^ + | | + | Error + | Error | = note: an implementation of `std::cmp::PartialEq` might be missing for `Error` diff --git a/src/test/ui/derives/deriving-no-inner-impl-error-message.stderr b/src/test/ui/derives/deriving-no-inner-impl-error-message.stderr index 3206eecbe30..4baf27c520c 100644 --- a/src/test/ui/derives/deriving-no-inner-impl-error-message.stderr +++ b/src/test/ui/derives/deriving-no-inner-impl-error-message.stderr @@ -3,6 +3,9 @@ error[E0369]: binary operation `==` cannot be applied to type `NoCloneOrEq` | LL | x: NoCloneOrEq | ^^^^^^^^^^^^^^ + | | + | NoCloneOrEq + | NoCloneOrEq | = note: an implementation of `std::cmp::PartialEq` might be missing for `NoCloneOrEq` @@ -11,6 +14,9 @@ error[E0369]: binary operation `!=` cannot be applied to type `NoCloneOrEq` | LL | x: NoCloneOrEq | ^^^^^^^^^^^^^^ + | | + | NoCloneOrEq + | NoCloneOrEq | = note: an implementation of `std::cmp::PartialEq` might be missing for `NoCloneOrEq` diff --git a/src/test/ui/fn/fn-compare-mismatch.stderr b/src/test/ui/fn/fn-compare-mismatch.stderr index 54dae525ffd..07b93d9aae7 100644 --- a/src/test/ui/fn/fn-compare-mismatch.stderr +++ b/src/test/ui/fn/fn-compare-mismatch.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `==` cannot be applied to type `fn() {main::f}` - --> $DIR/fn-compare-mismatch.rs:4:13 + --> $DIR/fn-compare-mismatch.rs:4:15 | LL | let x = f == g; - | ^^^^^^ + | - ^^ - fn() {main::g} + | | + | fn() {main::f} | = note: an implementation of `std::cmp::PartialEq` might be missing for `fn() {main::f}` diff --git a/src/test/ui/for/for-loop-type-error.stderr b/src/test/ui/for/for-loop-type-error.stderr index f1c1d0a5388..588e7a0ed33 100644 --- a/src/test/ui/for/for-loop-type-error.stderr +++ b/src/test/ui/for/for-loop-type-error.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `()` - --> $DIR/for-loop-type-error.rs:2:13 + --> $DIR/for-loop-type-error.rs:2:16 | LL | let x = () + (); - | ^^^^^^^ + | -- ^ -- () + | | + | () | = note: an implementation of `std::ops::Add` might be missing for `()` diff --git a/src/test/ui/issues/issue-14915.stderr b/src/test/ui/issues/issue-14915.stderr index 411d7a34552..e8de44320da 100644 --- a/src/test/ui/issues/issue-14915.stderr +++ b/src/test/ui/issues/issue-14915.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `std::boxed::Box<isize>` - --> $DIR/issue-14915.rs:6:20 + --> $DIR/issue-14915.rs:6:22 | LL | println!("{}", x + 1); - | ^^^^^ + | - ^ - {integer} + | | + | std::boxed::Box<isize> | = note: an implementation of `std::ops::Add` might be missing for `std::boxed::Box<isize>` diff --git a/src/test/ui/issues/issue-24363.stderr b/src/test/ui/issues/issue-24363.stderr index 3399856d3f9..6f269ba764c 100644 --- a/src/test/ui/issues/issue-24363.stderr +++ b/src/test/ui/issues/issue-24363.stderr @@ -5,10 +5,12 @@ LL | 1.create_a_type_error[ | ^^^^^^^^^^^^^^^^^^^ error[E0369]: binary operation `+` cannot be applied to type `()` - --> $DIR/issue-24363.rs:3:9 + --> $DIR/issue-24363.rs:3:11 | LL | ()+() - | ^^^^^ + | --^-- () + | | + | () | = note: an implementation of `std::ops::Add` might be missing for `()` diff --git a/src/test/ui/issues/issue-28837.stderr b/src/test/ui/issues/issue-28837.stderr index aeb25ce1286..ac2a9f2203d 100644 --- a/src/test/ui/issues/issue-28837.stderr +++ b/src/test/ui/issues/issue-28837.stderr @@ -1,120 +1,150 @@ error[E0369]: binary operation `+` cannot be applied to type `A` - --> $DIR/issue-28837.rs:6:5 + --> $DIR/issue-28837.rs:6:7 | LL | a + a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::ops::Add` might be missing for `A` error[E0369]: binary operation `-` cannot be applied to type `A` - --> $DIR/issue-28837.rs:8:5 + --> $DIR/issue-28837.rs:8:7 | LL | a - a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::ops::Sub` might be missing for `A` error[E0369]: binary operation `*` cannot be applied to type `A` - --> $DIR/issue-28837.rs:10:5 + --> $DIR/issue-28837.rs:10:7 | LL | a * a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::ops::Mul` might be missing for `A` error[E0369]: binary operation `/` cannot be applied to type `A` - --> $DIR/issue-28837.rs:12:5 + --> $DIR/issue-28837.rs:12:7 | LL | a / a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::ops::Div` might be missing for `A` error[E0369]: binary operation `%` cannot be applied to type `A` - --> $DIR/issue-28837.rs:14:5 + --> $DIR/issue-28837.rs:14:7 | LL | a % a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::ops::Rem` might be missing for `A` error[E0369]: binary operation `&` cannot be applied to type `A` - --> $DIR/issue-28837.rs:16:5 + --> $DIR/issue-28837.rs:16:7 | LL | a & a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::ops::BitAnd` might be missing for `A` error[E0369]: binary operation `|` cannot be applied to type `A` - --> $DIR/issue-28837.rs:18:5 + --> $DIR/issue-28837.rs:18:7 | LL | a | a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::ops::BitOr` might be missing for `A` error[E0369]: binary operation `<<` cannot be applied to type `A` - --> $DIR/issue-28837.rs:20:5 + --> $DIR/issue-28837.rs:20:7 | LL | a << a; - | ^^^^^^ + | - ^^ - A + | | + | A | = note: an implementation of `std::ops::Shl` might be missing for `A` error[E0369]: binary operation `>>` cannot be applied to type `A` - --> $DIR/issue-28837.rs:22:5 + --> $DIR/issue-28837.rs:22:7 | LL | a >> a; - | ^^^^^^ + | - ^^ - A + | | + | A | = note: an implementation of `std::ops::Shr` might be missing for `A` error[E0369]: binary operation `==` cannot be applied to type `A` - --> $DIR/issue-28837.rs:24:5 + --> $DIR/issue-28837.rs:24:7 | LL | a == a; - | ^^^^^^ + | - ^^ - A + | | + | A | = note: an implementation of `std::cmp::PartialEq` might be missing for `A` error[E0369]: binary operation `!=` cannot be applied to type `A` - --> $DIR/issue-28837.rs:26:5 + --> $DIR/issue-28837.rs:26:7 | LL | a != a; - | ^^^^^^ + | - ^^ - A + | | + | A | = note: an implementation of `std::cmp::PartialEq` might be missing for `A` error[E0369]: binary operation `<` cannot be applied to type `A` - --> $DIR/issue-28837.rs:28:5 + --> $DIR/issue-28837.rs:28:7 | LL | a < a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::cmp::PartialOrd` might be missing for `A` error[E0369]: binary operation `<=` cannot be applied to type `A` - --> $DIR/issue-28837.rs:30:5 + --> $DIR/issue-28837.rs:30:7 | LL | a <= a; - | ^^^^^^ + | - ^^ - A + | | + | A | = note: an implementation of `std::cmp::PartialOrd` might be missing for `A` error[E0369]: binary operation `>` cannot be applied to type `A` - --> $DIR/issue-28837.rs:32:5 + --> $DIR/issue-28837.rs:32:7 | LL | a > a; - | ^^^^^ + | - ^ - A + | | + | A | = note: an implementation of `std::cmp::PartialOrd` might be missing for `A` error[E0369]: binary operation `>=` cannot be applied to type `A` - --> $DIR/issue-28837.rs:34:5 + --> $DIR/issue-28837.rs:34:7 | LL | a >= a; - | ^^^^^^ + | - ^^ - A + | | + | A | = note: an implementation of `std::cmp::PartialOrd` might be missing for `A` diff --git a/src/test/ui/issues/issue-31076.stderr b/src/test/ui/issues/issue-31076.stderr index 3a13f02d9f4..60a3be1c36b 100644 --- a/src/test/ui/issues/issue-31076.stderr +++ b/src/test/ui/issues/issue-31076.stderr @@ -1,16 +1,20 @@ error[E0369]: binary operation `+` cannot be applied to type `{integer}` - --> $DIR/issue-31076.rs:13:13 + --> $DIR/issue-31076.rs:13:15 | LL | let x = 5 + 6; - | ^^^^^ + | - ^ - {integer} + | | + | {integer} | = note: an implementation of `std::ops::Add` might be missing for `{integer}` error[E0369]: binary operation `+` cannot be applied to type `i32` - --> $DIR/issue-31076.rs:15:13 + --> $DIR/issue-31076.rs:15:18 | LL | let y = 5i32 + 6i32; - | ^^^^^^^^^^^ + | ---- ^ ---- i32 + | | + | i32 | = note: an implementation of `std::ops::Add` might be missing for `i32` diff --git a/src/test/ui/issues/issue-35668.stderr b/src/test/ui/issues/issue-35668.stderr index 08ce2faff10..59ca874bd20 100644 --- a/src/test/ui/issues/issue-35668.stderr +++ b/src/test/ui/issues/issue-35668.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `*` cannot be applied to type `&T` - --> $DIR/issue-35668.rs:2:22 + --> $DIR/issue-35668.rs:2:23 | LL | a.iter().map(|a| a*a) - | ^^^ + | -^- &T + | | + | &T | = note: an implementation of `std::ops::Mul` might be missing for `&T` diff --git a/src/test/ui/issues/issue-3820.stderr b/src/test/ui/issues/issue-3820.stderr index b4af9c2d27d..35eceb3b3c6 100644 --- a/src/test/ui/issues/issue-3820.stderr +++ b/src/test/ui/issues/issue-3820.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `*` cannot be applied to type `Thing` - --> $DIR/issue-3820.rs:14:13 + --> $DIR/issue-3820.rs:14:15 | LL | let w = u * 3; - | ^^^^^ + | - ^ - {integer} + | | + | Thing | = note: an implementation of `std::ops::Mul` might be missing for `Thing` diff --git a/src/test/ui/issues/issue-40610.stderr b/src/test/ui/issues/issue-40610.stderr index f441d65b91e..9d577591929 100644 --- a/src/test/ui/issues/issue-40610.stderr +++ b/src/test/ui/issues/issue-40610.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `()` - --> $DIR/issue-40610.rs:4:5 + --> $DIR/issue-40610.rs:4:8 | LL | () + f(&[1.0]); - | ^^^^^^^^^^^^^^ + | -- ^ --------- () + | | + | () | = note: an implementation of `std::ops::Add` might be missing for `()` diff --git a/src/test/ui/issues/issue-41394.stderr b/src/test/ui/issues/issue-41394.stderr index bc5c6e798e8..5de5889d817 100644 --- a/src/test/ui/issues/issue-41394.stderr +++ b/src/test/ui/issues/issue-41394.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `&str` - --> $DIR/issue-41394.rs:2:9 + --> $DIR/issue-41394.rs:2:12 | LL | A = "" + 1 - | ^^^^^^ + | -- ^ - {integer} + | | + | &str | = note: an implementation of `std::ops::Add` might be missing for `&str` diff --git a/src/test/ui/issues/issue-47377.stderr b/src/test/ui/issues/issue-47377.stderr index 1e945727746..f782ad42fcb 100644 --- a/src/test/ui/issues/issue-47377.stderr +++ b/src/test/ui/issues/issue-47377.stderr @@ -1,8 +1,12 @@ error[E0369]: binary operation `+` cannot be applied to type `&str` - --> $DIR/issue-47377.rs:4:12 + --> $DIR/issue-47377.rs:4:14 | LL | let _a = b + ", World!"; - | ^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings + | --^----------- + | | | + | | &str + | &str + | `+` can't be used to concatenate two `&str` strings help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _a = b.to_owned() + ", World!"; diff --git a/src/test/ui/issues/issue-47380.stderr b/src/test/ui/issues/issue-47380.stderr index 84c5df3ca89..753892c97e7 100644 --- a/src/test/ui/issues/issue-47380.stderr +++ b/src/test/ui/issues/issue-47380.stderr @@ -1,8 +1,12 @@ error[E0369]: binary operation `+` cannot be applied to type `&str` - --> $DIR/issue-47380.rs:3:33 + --> $DIR/issue-47380.rs:3:35 | LL | println!("🦀🦀🦀🦀🦀"); let _a = b + ", World!"; - | ^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings + | --^----------- + | | | + | | &str + | &str + | `+` can't be used to concatenate two `&str` strings help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | println!("🦀🦀🦀🦀🦀"); let _a = b.to_owned() + ", World!"; diff --git a/src/test/ui/parser/require-parens-for-chained-comparison.stderr b/src/test/ui/parser/require-parens-for-chained-comparison.stderr index 4597b143215..8899b0d43cd 100644 --- a/src/test/ui/parser/require-parens-for-chained-comparison.stderr +++ b/src/test/ui/parser/require-parens-for-chained-comparison.stderr @@ -38,10 +38,12 @@ LL | false == 0 < 2; found type `{integer}` error[E0369]: binary operation `<` cannot be applied to type `fn() {f::<_>}` - --> $DIR/require-parens-for-chained-comparison.rs:13:5 + --> $DIR/require-parens-for-chained-comparison.rs:13:6 | LL | f<X>(); - | ^^^ + | -^- X + | | + | fn() {f::<_>} | = note: an implementation of `std::cmp::PartialOrd` might be missing for `fn() {f::<_>}` diff --git a/src/test/ui/pattern/pattern-tyvar-2.stderr b/src/test/ui/pattern/pattern-tyvar-2.stderr index 5218dd916a5..7c6ae499cbb 100644 --- a/src/test/ui/pattern/pattern-tyvar-2.stderr +++ b/src/test/ui/pattern/pattern-tyvar-2.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `*` cannot be applied to type `std::vec::Vec<isize>` - --> $DIR/pattern-tyvar-2.rs:3:69 + --> $DIR/pattern-tyvar-2.rs:3:71 | LL | fn foo(t: Bar) -> isize { match t { Bar::T1(_, Some(x)) => { return x * 3; } _ => { panic!(); } } } - | ^^^^^ + | - ^ - {integer} + | | + | std::vec::Vec<isize> | = note: an implementation of `std::ops::Mul` might be missing for `std::vec::Vec<isize>` diff --git a/src/test/ui/span/issue-39018.stderr b/src/test/ui/span/issue-39018.stderr index 00f1b11df19..6e475483987 100644 --- a/src/test/ui/span/issue-39018.stderr +++ b/src/test/ui/span/issue-39018.stderr @@ -1,26 +1,36 @@ error[E0369]: binary operation `+` cannot be applied to type `&str` - --> $DIR/issue-39018.rs:2:13 + --> $DIR/issue-39018.rs:2:22 | LL | let x = "Hello " + "World!"; - | ^^^^^^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings + | ---------^--------- + | | | + | | &str + | &str + | `+` can't be used to concatenate two `&str` strings help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let x = "Hello ".to_owned() + "World!"; | ^^^^^^^^^^^^^^^^^^^ error[E0369]: binary operation `+` cannot be applied to type `World` - --> $DIR/issue-39018.rs:8:13 + --> $DIR/issue-39018.rs:8:26 | LL | let y = World::Hello + World::Goodbye; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | ------------ ^ -------------- World + | | + | World | = note: an implementation of `std::ops::Add` might be missing for `World` error[E0369]: binary operation `+` cannot be applied to type `&str` - --> $DIR/issue-39018.rs:11:13 + --> $DIR/issue-39018.rs:11:22 | LL | let x = "Hello " + "World!".to_owned(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `+` can't be used to concatenate a `&str` with a `String` + | ---------^-------------------- + | | | + | | std::string::String + | &str + | `+` can't be used to concatenate a `&str` with a `String` help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let x = "Hello ".to_owned() + &"World!".to_owned(); diff --git a/src/test/ui/str/str-concat-on-double-ref.stderr b/src/test/ui/str/str-concat-on-double-ref.stderr index a67db1936f0..61ebcfdefc3 100644 --- a/src/test/ui/str/str-concat-on-double-ref.stderr +++ b/src/test/ui/str/str-concat-on-double-ref.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `&std::string::String` - --> $DIR/str-concat-on-double-ref.rs:4:13 + --> $DIR/str-concat-on-double-ref.rs:4:15 | LL | let c = a + b; - | ^^^^^ + | - ^ - &str + | | + | &std::string::String | = note: an implementation of `std::ops::Add` might be missing for `&std::string::String` diff --git a/src/test/ui/traits/trait-resolution-in-overloaded-op.stderr b/src/test/ui/traits/trait-resolution-in-overloaded-op.stderr index 3b10632b818..d11562e2a00 100644 --- a/src/test/ui/traits/trait-resolution-in-overloaded-op.stderr +++ b/src/test/ui/traits/trait-resolution-in-overloaded-op.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `*` cannot be applied to type `&T` - --> $DIR/trait-resolution-in-overloaded-op.rs:8:5 + --> $DIR/trait-resolution-in-overloaded-op.rs:8:7 | LL | a * b - | ^^^^^ + | - ^ - f64 + | | + | &T | = note: an implementation of `std::ops::Mul` might be missing for `&T` diff --git a/src/test/ui/type/type-check/missing_trait_impl.stderr b/src/test/ui/type/type-check/missing_trait_impl.stderr index 69b531d0c84..b0e3c35c705 100644 --- a/src/test/ui/type/type-check/missing_trait_impl.stderr +++ b/src/test/ui/type/type-check/missing_trait_impl.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `T` - --> $DIR/missing_trait_impl.rs:5:13 + --> $DIR/missing_trait_impl.rs:5:15 | LL | let z = x + y; - | ^^^^^ + | - ^ - T + | | + | T | = note: `T` might need a bound for `std::ops::Add` diff --git a/src/test/ui/vec/vec-res-add.stderr b/src/test/ui/vec/vec-res-add.stderr index 39552697631..78b70f09e90 100644 --- a/src/test/ui/vec/vec-res-add.stderr +++ b/src/test/ui/vec/vec-res-add.stderr @@ -1,8 +1,10 @@ error[E0369]: binary operation `+` cannot be applied to type `std::vec::Vec<R>` - --> $DIR/vec-res-add.rs:16:13 + --> $DIR/vec-res-add.rs:16:15 | LL | let k = i + j; - | ^^^^^ + | - ^ - std::vec::Vec<R> + | | + | std::vec::Vec<R> | = note: an implementation of `std::ops::Add` might be missing for `std::vec::Vec<R>` |
