Also suggest dereferencing LHS when both &mut T and T are valid binop LHS
This commit is contained in:
parent
771456264b
commit
98f4b20abc
@ -70,6 +70,14 @@ pub fn check_binop_assign(
|
||||
.is_err()
|
||||
{
|
||||
err.downgrade_to_delayed_bug();
|
||||
} else {
|
||||
// Otherwise, it's valid to suggest dereferencing the LHS here.
|
||||
err.span_suggestion_verbose(
|
||||
lhs.span.shrink_to_lo(),
|
||||
"consider dereferencing the left-hand side of this operation",
|
||||
"*",
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
19
src/test/ui/typeck/assign-non-lval-needs-deref.rs
Normal file
19
src/test/ui/typeck/assign-non-lval-needs-deref.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// issue #101376
|
||||
|
||||
use std::ops::AddAssign;
|
||||
struct Foo;
|
||||
|
||||
impl AddAssign<()> for Foo {
|
||||
fn add_assign(&mut self, _: ()) {}
|
||||
}
|
||||
|
||||
impl AddAssign<()> for &mut Foo {
|
||||
fn add_assign(&mut self, _: ()) {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
(&mut Foo) += ();
|
||||
//~^ ERROR invalid left-hand side of assignment
|
||||
//~| NOTE cannot assign to this expression
|
||||
//~| HELP consider dereferencing the left-hand side of this operation
|
||||
}
|
16
src/test/ui/typeck/assign-non-lval-needs-deref.stderr
Normal file
16
src/test/ui/typeck/assign-non-lval-needs-deref.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error[E0067]: invalid left-hand side of assignment
|
||||
--> $DIR/assign-non-lval-needs-deref.rs:15:16
|
||||
|
|
||||
LL | (&mut Foo) += ();
|
||||
| ---------- ^^
|
||||
| |
|
||||
| cannot assign to this expression
|
||||
|
|
||||
help: consider dereferencing the left-hand side of this operation
|
||||
|
|
||||
LL | *(&mut Foo) += ();
|
||||
| +
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0067`.
|
Loading…
Reference in New Issue
Block a user