From dec7fc3ced5bc3c18d0e5d29921d087f93189cb8 Mon Sep 17 00:00:00 2001 From: Theodore Luo Wang Date: Sat, 28 Aug 2021 21:18:20 -0400 Subject: [PATCH] Fix an ICE caused by type mismatch errors being ignored --- compiler/rustc_typeck/src/check/demand.rs | 6 ------ .../ui/typeck/issue-87771-ice-assign-assign-to-bool.rs | 4 ++++ .../typeck/issue-87771-ice-assign-assign-to-bool.stderr | 9 +++++++++ 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.rs create mode 100644 src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.stderr diff --git a/compiler/rustc_typeck/src/check/demand.rs b/compiler/rustc_typeck/src/check/demand.rs index 808685d7fa9c..f186d35bcbc8 100644 --- a/compiler/rustc_typeck/src/check/demand.rs +++ b/compiler/rustc_typeck/src/check/demand.rs @@ -145,12 +145,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let expr_ty = self.resolve_vars_with_obligations(checked_ty); let mut err = self.report_mismatched_types(&cause, expected, expr_ty, e); - if self.is_assign_to_bool(expr, expected) { - // Error reported in `check_assign` so avoid emitting error again. - err.delay_as_bug(); - return (expected, None); - } - self.emit_coerce_suggestions(&mut err, expr, expr_ty, expected, expected_ty_expr); (expected, Some(err)) diff --git a/src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.rs b/src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.rs new file mode 100644 index 000000000000..751dc8719cf3 --- /dev/null +++ b/src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.rs @@ -0,0 +1,4 @@ +fn main() { + let mut a; + a = a = true; //~ ERROR mismatched types +} diff --git a/src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.stderr b/src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.stderr new file mode 100644 index 000000000000..fe10fa733d23 --- /dev/null +++ b/src/test/ui/typeck/issue-87771-ice-assign-assign-to-bool.stderr @@ -0,0 +1,9 @@ +error[E0308]: mismatched types + --> $DIR/issue-87771-ice-assign-assign-to-bool.rs:3:9 + | +LL | a = a = true; + | ^^^^^^^^ expected `bool`, found `()` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`.