Only suppress binop error in favor of semicolon suggestion if we're in an assignment statement
This commit is contained in:
parent
5baee04b63
commit
a02aba7c54
@ -381,10 +381,13 @@ fn check_overloaded_binop(
|
||||
let maybe_missing_semi = self.check_for_missing_semi(expr, &mut err);
|
||||
|
||||
// We defer to the later error produced by `check_lhs_assignable`.
|
||||
// We only downgrade this if it's the LHS, though.
|
||||
// We only downgrade this if it's the LHS, though, and if this is a
|
||||
// valid assignment statement.
|
||||
if maybe_missing_semi
|
||||
&& let hir::Node::Expr(parent) = self.tcx.parent_hir_node(expr.hir_id)
|
||||
&& let hir::ExprKind::Assign(lhs, _, _) = parent.kind
|
||||
&& let hir::Node::Stmt(stmt) = self.tcx.parent_hir_node(parent.hir_id)
|
||||
&& let hir::StmtKind::Expr(_) | hir::StmtKind::Semi(_) = stmt.kind
|
||||
&& lhs.hir_id == expr.hir_id
|
||||
{
|
||||
err.downgrade_to_delayed_bug();
|
||||
|
14
tests/ui/binop/nested-assignment-may-be-deref.rs
Normal file
14
tests/ui/binop/nested-assignment-may-be-deref.rs
Normal file
@ -0,0 +1,14 @@
|
||||
pub fn bad(x: &mut bool) {
|
||||
if true
|
||||
*x = true {}
|
||||
//~^ ERROR cannot multiply `bool` by `&mut bool`
|
||||
}
|
||||
|
||||
pub fn bad2(x: &mut bool) {
|
||||
let y: bool;
|
||||
y = true
|
||||
*x = true;
|
||||
//~^ ERROR cannot multiply `bool` by `&mut bool`
|
||||
}
|
||||
|
||||
fn main() {}
|
29
tests/ui/binop/nested-assignment-may-be-deref.stderr
Normal file
29
tests/ui/binop/nested-assignment-may-be-deref.stderr
Normal file
@ -0,0 +1,29 @@
|
||||
error[E0369]: cannot multiply `bool` by `&mut bool`
|
||||
--> $DIR/nested-assignment-may-be-deref.rs:3:5
|
||||
|
|
||||
LL | if true
|
||||
| ---- bool
|
||||
LL | *x = true {}
|
||||
| ^- &mut bool
|
||||
|
|
||||
help: you might have meant to write a semicolon here
|
||||
|
|
||||
LL | if true;
|
||||
| +
|
||||
|
||||
error[E0369]: cannot multiply `bool` by `&mut bool`
|
||||
--> $DIR/nested-assignment-may-be-deref.rs:10:5
|
||||
|
|
||||
LL | y = true
|
||||
| ---- bool
|
||||
LL | *x = true;
|
||||
| ^- &mut bool
|
||||
|
|
||||
help: you might have meant to write a semicolon here
|
||||
|
|
||||
LL | y = true;
|
||||
| +
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0369`.
|
Loading…
Reference in New Issue
Block a user