From 12c7832592b2a2b63c16bc0189052268d6247f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Fri, 27 Oct 2023 17:27:21 +0000 Subject: [PATCH] Silence redundant error on typo resulting on binop --- compiler/rustc_hir_typeck/src/op.rs | 6 ++++++ .../false-binop-caused-by-missing-semi.fixed | 10 ++++++++++ .../false-binop-caused-by-missing-semi.rs | 3 ++- .../false-binop-caused-by-missing-semi.stderr | 20 +++---------------- 4 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 tests/ui/binop/false-binop-caused-by-missing-semi.fixed diff --git a/compiler/rustc_hir_typeck/src/op.rs b/compiler/rustc_hir_typeck/src/op.rs index 92075c7832a97..88922f454eac8 100644 --- a/compiler/rustc_hir_typeck/src/op.rs +++ b/compiler/rustc_hir_typeck/src/op.rs @@ -394,6 +394,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ";".to_string(), Applicability::MaybeIncorrect, ); + if let hir::Node::Expr(expr) = self.tcx.hir().get_parent(expr.hir_id) + && let hir::ExprKind::Assign(..) = expr.kind + { + // We defer to the later error produced by `check_lhs_assignable`. + err.delay_as_bug(); + } } let suggest_deref_binop = diff --git a/tests/ui/binop/false-binop-caused-by-missing-semi.fixed b/tests/ui/binop/false-binop-caused-by-missing-semi.fixed new file mode 100644 index 0000000000000..b47372c906486 --- /dev/null +++ b/tests/ui/binop/false-binop-caused-by-missing-semi.fixed @@ -0,0 +1,10 @@ +// run-rustfix +fn foo() {} +fn main() { + let mut y = 42; + let x = &mut y; + foo(); + *x = 0; //~ ERROR invalid left-hand side of assignment + let _ = x; + println!("{y}"); +} diff --git a/tests/ui/binop/false-binop-caused-by-missing-semi.rs b/tests/ui/binop/false-binop-caused-by-missing-semi.rs index 9cd32e1db500c..14671de7e5111 100644 --- a/tests/ui/binop/false-binop-caused-by-missing-semi.rs +++ b/tests/ui/binop/false-binop-caused-by-missing-semi.rs @@ -1,9 +1,10 @@ +// run-rustfix fn foo() {} fn main() { let mut y = 42; let x = &mut y; foo() *x = 0; //~ ERROR invalid left-hand side of assignment - //~^ ERROR cannot multiply `()` by `&mut {integer}` + let _ = x; println!("{y}"); } diff --git a/tests/ui/binop/false-binop-caused-by-missing-semi.stderr b/tests/ui/binop/false-binop-caused-by-missing-semi.stderr index 8d0f15fe2ea16..fca042b1c57d2 100644 --- a/tests/ui/binop/false-binop-caused-by-missing-semi.stderr +++ b/tests/ui/binop/false-binop-caused-by-missing-semi.stderr @@ -1,18 +1,5 @@ -error[E0369]: cannot multiply `()` by `&mut {integer}` - --> $DIR/false-binop-caused-by-missing-semi.rs:6:5 - | -LL | foo() - | ----- () -LL | *x = 0; - | ^- &mut {integer} - | -help: you might have meant to write a semicolon here - | -LL | foo(); - | + - error[E0070]: invalid left-hand side of assignment - --> $DIR/false-binop-caused-by-missing-semi.rs:6:8 + --> $DIR/false-binop-caused-by-missing-semi.rs:7:8 | LL | / foo() LL | | *x = 0; @@ -25,7 +12,6 @@ help: you might have meant to write a semicolon here LL | foo(); | + -error: aborting due to 2 previous errors +error: aborting due to previous error -Some errors have detailed explanations: E0070, E0369. -For more information about an error, try `rustc --explain E0070`. +For more information about this error, try `rustc --explain E0070`.