remove DesugaringKind::CondTemporary
This commit is contained in:
@@ -51,12 +51,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
};
|
||||
|
||||
match span.desugaring_kind() {
|
||||
// If span arose from a desugaring of `if` or `while`, then it is the condition
|
||||
// itself, which diverges, that we are about to lint on. This gives suboptimal
|
||||
// diagnostics. Instead, stop here so that the `if`- or `while`-expression's
|
||||
// block is linted instead.
|
||||
Some(DesugaringKind::CondTemporary) => return,
|
||||
|
||||
// Don't lint if the result of an async block or async function is `!`.
|
||||
// This does not affect the unreachable lints *within* the body.
|
||||
Some(DesugaringKind::Async) => return,
|
||||
|
||||
@@ -24,7 +24,6 @@ use rustc_session::lint::builtin::NON_EXHAUSTIVE_OMITTED_PATTERNS;
|
||||
use rustc_session::parse::feature_err;
|
||||
use rustc_span::edit_distance::find_best_match_for_name;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::hygiene::DesugaringKind;
|
||||
use rustc_span::source_map::Spanned;
|
||||
use rustc_span::{BytePos, DUMMY_SP, Ident, Span, kw, sym};
|
||||
use rustc_trait_selection::infer::InferCtxtExt;
|
||||
@@ -902,16 +901,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// then that's equivalent to there existing a LUB.
|
||||
let cause = self.pattern_cause(ti, span);
|
||||
if let Err(err) = self.demand_suptype_with_origin(&cause, expected, pat_ty) {
|
||||
err.emit_unless(
|
||||
ti.span
|
||||
.filter(|&s| {
|
||||
// In the case of `if`- and `while`-expressions we've already checked
|
||||
// that `scrutinee: bool`. We know that the pattern is `true`,
|
||||
// so an error here would be a duplicate and from the wrong POV.
|
||||
s.is_desugaring(DesugaringKind::CondTemporary)
|
||||
})
|
||||
.is_some(),
|
||||
);
|
||||
err.emit();
|
||||
}
|
||||
|
||||
pat_ty
|
||||
|
||||
@@ -1191,11 +1191,6 @@ impl AstPass {
|
||||
/// The kind of compiler desugaring.
|
||||
#[derive(Clone, Copy, PartialEq, Debug, Encodable, Decodable, HashStable_Generic)]
|
||||
pub enum DesugaringKind {
|
||||
/// We desugar `if c { i } else { e }` to `match $ExprKind::Use(c) { true => i, _ => e }`.
|
||||
/// However, we do not want to blame `c` for unreachability but rather say that `i`
|
||||
/// is unreachable. This desugaring kind allows us to avoid blaming `c`.
|
||||
/// This also applies to `while` loops.
|
||||
CondTemporary,
|
||||
QuestionMark,
|
||||
TryBlock,
|
||||
YeetExpr,
|
||||
@@ -1230,7 +1225,6 @@ impl DesugaringKind {
|
||||
/// The description wording should combine well with "desugaring of {}".
|
||||
pub fn descr(self) -> &'static str {
|
||||
match self {
|
||||
DesugaringKind::CondTemporary => "`if` or `while` condition",
|
||||
DesugaringKind::Async => "`async` block or function",
|
||||
DesugaringKind::Await => "`await` expression",
|
||||
DesugaringKind::QuestionMark => "operator `?`",
|
||||
@@ -1253,7 +1247,6 @@ impl DesugaringKind {
|
||||
/// like `from_desugaring = "QuestionMark"`
|
||||
pub fn matches(&self, value: &str) -> bool {
|
||||
match self {
|
||||
DesugaringKind::CondTemporary => value == "CondTemporary",
|
||||
DesugaringKind::Async => value == "Async",
|
||||
DesugaringKind::Await => value == "Await",
|
||||
DesugaringKind::QuestionMark => value == "QuestionMark",
|
||||
|
||||
Reference in New Issue
Block a user