Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs')
-rw-r--r--crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs22
1 files changed, 6 insertions, 16 deletions
diff --git a/crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs b/crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs
index c70c6b6119..e7ee7c62b9 100644
--- a/crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs
+++ b/crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs
@@ -14,14 +14,12 @@ use rustc_pattern_analysis::{
use rustc_type_ir::inherent::{AdtDef, IntoKind, SliceLike};
use smallvec::{SmallVec, smallvec};
use stdx::never;
-use triomphe::Arc;
use crate::{
- TraitEnvironment,
db::HirDatabase,
inhabitedness::{is_enum_variant_uninhabited_from, is_ty_uninhabited_from},
next_solver::{
- Ty, TyKind,
+ ParamEnv, Ty, TyKind,
infer::{InferCtxt, traits::ObligationCause},
},
};
@@ -76,16 +74,12 @@ pub(crate) struct MatchCheckCtx<'a, 'db> {
module: ModuleId,
pub(crate) db: &'db dyn HirDatabase,
exhaustive_patterns: bool,
- env: Arc<TraitEnvironment<'db>>,
+ env: ParamEnv<'db>,
infcx: &'a InferCtxt<'db>,
}
impl<'a, 'db> MatchCheckCtx<'a, 'db> {
- pub(crate) fn new(
- module: ModuleId,
- infcx: &'a InferCtxt<'db>,
- env: Arc<TraitEnvironment<'db>>,
- ) -> Self {
+ pub(crate) fn new(module: ModuleId, infcx: &'a InferCtxt<'db>, env: ParamEnv<'db>) -> Self {
let db = infcx.interner.db;
let def_map = module.crate_def_map(db);
let exhaustive_patterns = def_map.is_unstable_feature_enabled(&sym::exhaustive_patterns);
@@ -114,7 +108,7 @@ impl<'a, 'db> MatchCheckCtx<'a, 'db> {
}
fn is_uninhabited(&self, ty: Ty<'db>) -> bool {
- is_ty_uninhabited_from(self.infcx, ty, self.module, self.env.clone())
+ is_ty_uninhabited_from(self.infcx, ty, self.module, self.env)
}
/// Returns whether the given ADT is from another crate declared `#[non_exhaustive]`.
@@ -159,7 +153,7 @@ impl<'a, 'db> MatchCheckCtx<'a, 'db> {
let ty = field_tys[fid].instantiate(self.infcx.interner, substs);
let ty = self
.infcx
- .at(&ObligationCause::dummy(), self.env.env)
+ .at(&ObligationCause::dummy(), self.env)
.deeply_normalize(ty)
.unwrap_or(ty);
(fid, ty)
@@ -446,11 +440,7 @@ impl<'a, 'db> PatCx for MatchCheckCtx<'a, 'db> {
let mut variants = IndexVec::with_capacity(enum_data.variants.len());
for &(variant, _, _) in enum_data.variants.iter() {
let is_uninhabited = is_enum_variant_uninhabited_from(
- cx.infcx,
- variant,
- subst,
- cx.module,
- self.env.clone(),
+ cx.infcx, variant, subst, cx.module, self.env,
);
let visibility = if is_uninhabited {
VariantVisibility::Empty