diff options
| author | Theodore Luo Wang <wangtheo662@gmail.com> | 2021-09-16 23:31:16 -0400 |
|---|---|---|
| committer | Theodore Luo Wang <wangtheo662@gmail.com> | 2021-09-16 23:31:16 -0400 |
| commit | 09d55d516bdd3e89bef4cb1cabc598a16d9ad401 (patch) | |
| tree | bc6b3e1d1296416fb8ea08273522d907ba6b52a5 | |
| parent | dec7fc3ced5bc3c18d0e5d29921d087f93189cb8 (diff) | |
| download | rust-09d55d516bdd3e89bef4cb1cabc598a16d9ad401.tar.gz rust-09d55d516bdd3e89bef4cb1cabc598a16d9ad401.zip | |
Remove special checks to is_assign_to_bool
| -rw-r--r-- | compiler/rustc_typeck/src/check/coercion.rs | 16 | ||||
| -rw-r--r-- | compiler/rustc_typeck/src/check/demand.rs | 8 | ||||
| -rw-r--r-- | compiler/rustc_typeck/src/check/expr.rs | 3 |
3 files changed, 2 insertions, 25 deletions
diff --git a/compiler/rustc_typeck/src/check/coercion.rs b/compiler/rustc_typeck/src/check/coercion.rs index 3bfab9d513f..ab6f8742e3f 100644 --- a/compiler/rustc_typeck/src/check/coercion.rs +++ b/compiler/rustc_typeck/src/check/coercion.rs @@ -1494,21 +1494,7 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> { fcx.emit_coerce_suggestions(&mut err, expr, found, expected, None); } - // Error possibly reported in `check_assign` so avoid emitting error again. - let assign_to_bool = expression - // #67273: Use initial expected type as opposed to `expected`. - // Otherwise we end up using prior coercions in e.g. a `match` expression: - // ``` - // match i { - // 0 => true, // Because of this... - // 1 => i = 1, // ...`expected == bool` now, but not when checking `i = 1`. - // _ => (), - // }; - // ``` - .filter(|e| fcx.is_assign_to_bool(e, self.expected_ty())) - .is_some(); - - err.emit_unless(assign_to_bool || unsized_return); + err.emit_unless(unsized_return); self.final_ty = Some(fcx.tcx.ty_error()); } diff --git a/compiler/rustc_typeck/src/check/demand.rs b/compiler/rustc_typeck/src/check/demand.rs index f186d35bcbc..02228b64307 100644 --- a/compiler/rustc_typeck/src/check/demand.rs +++ b/compiler/rustc_typeck/src/check/demand.rs @@ -166,14 +166,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { } } - /// Returns whether the expected type is `bool` and the expression is `x = y`. - pub fn is_assign_to_bool(&self, expr: &hir::Expr<'_>, expected: Ty<'tcx>) -> bool { - if let hir::ExprKind::Assign(..) = expr.kind { - return expected == self.tcx.types.bool; - } - false - } - /// If the expected type is an enum (Issue #55250) with any variants whose /// sole field is of the found type, suggest such variants. (Issue #42764) fn suggest_compatible_variants( diff --git a/compiler/rustc_typeck/src/check/expr.rs b/compiler/rustc_typeck/src/check/expr.rs index ab927b79442..58545d3ec98 100644 --- a/compiler/rustc_typeck/src/check/expr.rs +++ b/compiler/rustc_typeck/src/check/expr.rs @@ -92,8 +92,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let expr = expr.peel_drop_temps(); self.suggest_deref_ref_or_into(&mut err, expr, expected_ty, ty, None); extend_err(&mut err); - // Error possibly reported in `check_assign` so avoid emitting error again. - err.emit_unless(self.is_assign_to_bool(expr, expected_ty)); + err.emit(); } ty } |
