Migrate lower range bound diagnostics
This commit is contained in:
parent
513e3995e0
commit
4b70784176
@ -200,3 +200,10 @@ mir_build_const_pattern_depends_on_generic_parameter =
|
||||
constant pattern depends on a generic parameter
|
||||
|
||||
mir_build_could_not_eval_const_pattern = could not evaluate constant pattern
|
||||
|
||||
mir_build_lower_range_bound_must_be_less_than_or_equal_to_upper =
|
||||
lower range bound must be less than or equal to upper
|
||||
.label = lower bound larger than upper bound
|
||||
.teach_note = When matching against a range, the compiler verifies that the range is non-empty. Range patterns include both end-points, so this is equivalent to requiring the start of the range to be less than or equal to the end of the range.
|
||||
|
||||
mir_build_lower_range_bound_must_be_less_than_upper = lower range bound must be less than upper
|
||||
|
@ -480,3 +480,20 @@ pub struct CouldNotEvalConstPattern {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(mir_build::lower_range_bound_must_be_less_than_or_equal_to_upper, code = "E0030")]
|
||||
pub struct LowerRangeBoundMustBeLessThanOrEqualToUpper {
|
||||
#[primary_span]
|
||||
#[label]
|
||||
pub span: Span,
|
||||
#[note(mir_build::teach_note)]
|
||||
pub teach: Option<()>,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(mir_build::lower_range_bound_must_be_less_than_upper, code = "E0579")]
|
||||
pub struct LowerRangeBoundMustBeLessThanUpper {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ pub(crate) use self::usefulness::MatchCheckCtxt;
|
||||
use crate::errors::*;
|
||||
use crate::thir::util::UserAnnotatedTyHelpers;
|
||||
|
||||
use rustc_errors::struct_span_err;
|
||||
use rustc_errors::error_code;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{CtorOf, DefKind, Res};
|
||||
use rustc_hir::pat_util::EnumerateAndAdjustIterator;
|
||||
@ -141,13 +141,7 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
|
||||
}
|
||||
// `x..y` where `x >= y`. The range is empty => error.
|
||||
(RangeEnd::Excluded, _) => {
|
||||
struct_span_err!(
|
||||
self.tcx.sess,
|
||||
span,
|
||||
E0579,
|
||||
"lower range bound must be less than upper"
|
||||
)
|
||||
.emit();
|
||||
self.tcx.sess.emit_err(LowerRangeBoundMustBeLessThanUpper { span });
|
||||
PatKind::Wild
|
||||
}
|
||||
// `x..=y` where `x == y`.
|
||||
@ -158,23 +152,10 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
|
||||
}
|
||||
// `x..=y` where `x > y` hence the range is empty => error.
|
||||
(RangeEnd::Included, _) => {
|
||||
let mut err = struct_span_err!(
|
||||
self.tcx.sess,
|
||||
self.tcx.sess.emit_err(LowerRangeBoundMustBeLessThanOrEqualToUpper {
|
||||
span,
|
||||
E0030,
|
||||
"lower range bound must be less than or equal to upper"
|
||||
);
|
||||
err.span_label(span, "lower bound larger than upper bound");
|
||||
if self.tcx.sess.teach(&err.get_code().unwrap()) {
|
||||
err.note(
|
||||
"When matching against a range, the compiler \
|
||||
verifies that the range is non-empty. Range \
|
||||
patterns include both end-points, so this is \
|
||||
equivalent to requiring the start of the range \
|
||||
to be less than or equal to the end of the range.",
|
||||
);
|
||||
}
|
||||
err.emit();
|
||||
teach: if self.tcx.sess.teach(&error_code!(E0030)) { Some(()) } else { None },
|
||||
});
|
||||
PatKind::Wild
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user