11use rustc_pattern_analysis::constructor::Constructor;
2+ use rustc_pattern_analysis::cx::MatchCheckCtxt;
23use rustc_pattern_analysis::errors::Uncovered;
34use rustc_pattern_analysis::pat::{DeconstructedPat, WitnessPat};
45use rustc_pattern_analysis::usefulness::{
5- compute_match_usefulness, MatchArm, MatchCheckCtxt, Usefulness, UsefulnessReport,
6+ compute_match_usefulness, MatchArm, Usefulness, UsefulnessReport,
67};
78
89use crate::errors::*;
@@ -286,7 +287,7 @@ impl<'thir, 'p, 'tcx> MatchVisitor<'thir, 'p, 'tcx> {
286287 check_borrow_conflicts_in_at_patterns(self, pat);
287288 check_for_bindings_named_same_as_variants(self, pat, refutable);
288289 });
289- Ok(cx.pattern_arena.alloc(DeconstructedPat::from_pat(cx, pat)))
290+ Ok(cx.pattern_arena.alloc(cx.lower_pat( pat)))
290291 }
291292 }
292293
@@ -926,7 +927,7 @@ fn report_non_exhaustive_match<'p, 'tcx>(
926927 pattern = if witnesses.len() < 4 {
927928 witnesses
928929 .iter()
929- .map(|witness| witness.to_diagnostic_pat(cx ).to_string())
930+ .map(|witness| cx.hoist_witness_pat(witness ).to_string())
930931 .collect::<Vec<String>>()
931932 .join(" | ")
932933 } else {
@@ -950,7 +951,7 @@ fn report_non_exhaustive_match<'p, 'tcx>(
950951 if !is_empty_match {
951952 let mut non_exhaustive_tys = FxHashSet::default();
952953 // Look at the first witness.
953- collect_non_exhaustive_tys(cx.tcx , &witnesses[0], &mut non_exhaustive_tys);
954+ collect_non_exhaustive_tys(cx, &witnesses[0], &mut non_exhaustive_tys);
954955
955956 for ty in non_exhaustive_tys {
956957 if ty.is_ptr_sized_integral() {
@@ -1085,13 +1086,13 @@ fn joined_uncovered_patterns<'p, 'tcx>(
10851086 witnesses: &[WitnessPat<'tcx>],
10861087) -> String {
10871088 const LIMIT: usize = 3;
1088- let pat_to_str = |pat: &WitnessPat<'tcx>| pat.to_diagnostic_pat(cx ).to_string();
1089+ let pat_to_str = |pat: &WitnessPat<'tcx>| cx.hoist_witness_pat(pat ).to_string();
10891090 match witnesses {
10901091 [] => bug!(),
1091- [witness] => format!("`{}`", witness.to_diagnostic_pat(cx )),
1092+ [witness] => format!("`{}`", cx.hoist_witness_pat(witness )),
10921093 [head @ .., tail] if head.len() < LIMIT => {
10931094 let head: Vec<_> = head.iter().map(pat_to_str).collect();
1094- format!("`{}` and `{}`", head.join("`, `"), tail.to_diagnostic_pat(cx ))
1095+ format!("`{}` and `{}`", head.join("`, `"), cx.hoist_witness_pat(tail ))
10951096 }
10961097 _ => {
10971098 let (head, tail) = witnesses.split_at(LIMIT);
@@ -1102,21 +1103,21 @@ fn joined_uncovered_patterns<'p, 'tcx>(
11021103}
11031104
11041105fn collect_non_exhaustive_tys<'tcx>(
1105- tcx: TyCtxt< 'tcx>,
1106+ cx: &MatchCheckCtxt<'_, 'tcx>,
11061107 pat: &WitnessPat<'tcx>,
11071108 non_exhaustive_tys: &mut FxHashSet<Ty<'tcx>>,
11081109) {
11091110 if matches!(pat.ctor(), Constructor::NonExhaustive) {
11101111 non_exhaustive_tys.insert(pat.ty());
11111112 }
11121113 if let Constructor::IntRange(range) = pat.ctor() {
1113- if range.is_beyond_boundaries( pat.ty(), tcx ) {
1114+ if cx.is_range_beyond_boundaries(range, pat.ty()) {
11141115 // The range denotes the values before `isize::MIN` or the values after `usize::MAX`/`isize::MAX`.
11151116 non_exhaustive_tys.insert(pat.ty());
11161117 }
11171118 }
11181119 pat.iter_fields()
1119- .for_each(|field_pat| collect_non_exhaustive_tys(tcx , field_pat, non_exhaustive_tys))
1120+ .for_each(|field_pat| collect_non_exhaustive_tys(cx , field_pat, non_exhaustive_tys))
11201121}
11211122
11221123fn report_adt_defined_here<'tcx>(
0 commit comments