Auto merge of #123736 - compiler-errors:multiply-on-rhs, r=estebank
Don't delay a bug if we suggest adding a semicolon to the RHS of an assign operator It only makes sense to delay a bug based on the assumption that "[we] defer to the later error produced by `check_lhs_assignable`" *if* the expression we're erroring actually is an LHS; otherwise, we should still report the error since it's both useful and required. Fixes #123722
This commit is contained in:
commit
ab71ee7a92
@ -382,11 +382,17 @@ fn check_overloaded_binop(
|
||||
(err, output_def_id)
|
||||
}
|
||||
};
|
||||
if self.check_for_missing_semi(expr, &mut err)
|
||||
&& let hir::Node::Expr(expr) = self.tcx.parent_hir_node(expr.hir_id)
|
||||
&& let hir::ExprKind::Assign(..) = expr.kind
|
||||
|
||||
// Try to suggest a semicolon if it's `A \n *B` where `B` is a place expr
|
||||
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.
|
||||
if maybe_missing_semi
|
||||
&& let hir::Node::Expr(parent) = self.tcx.parent_hir_node(expr.hir_id)
|
||||
&& let hir::ExprKind::Assign(lhs, _, _) = parent.kind
|
||||
&& lhs.hir_id == expr.hir_id
|
||||
{
|
||||
// We defer to the later error produced by `check_lhs_assignable`.
|
||||
err.downgrade_to_delayed_bug();
|
||||
}
|
||||
|
||||
|
8
tests/ui/binop/multiply-is-deref-on-rhs.rs
Normal file
8
tests/ui/binop/multiply-is-deref-on-rhs.rs
Normal file
@ -0,0 +1,8 @@
|
||||
pub fn test(y: &i32) {
|
||||
let x;
|
||||
x = ()
|
||||
*y
|
||||
//~^ ERROR cannot multiply `()` by `&i32`
|
||||
}
|
||||
|
||||
fn main() {}
|
16
tests/ui/binop/multiply-is-deref-on-rhs.stderr
Normal file
16
tests/ui/binop/multiply-is-deref-on-rhs.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error[E0369]: cannot multiply `()` by `&i32`
|
||||
--> $DIR/multiply-is-deref-on-rhs.rs:4:5
|
||||
|
|
||||
LL | x = ()
|
||||
| -- ()
|
||||
LL | *y
|
||||
| ^- &i32
|
||||
|
|
||||
help: you might have meant to write a semicolon here
|
||||
|
|
||||
LL | x = ();
|
||||
| +
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0369`.
|
Loading…
Reference in New Issue
Block a user