From 87e73c1f8288823e689ca254cdee9ab6c1723154 Mon Sep 17 00:00:00 2001 From: varkor Date: Wed, 31 Jul 2019 01:51:20 +0100 Subject: [PATCH] Remove redundant method with const variable resolution --- src/librustc/infer/canonical/canonicalizer.rs | 2 +- src/librustc/infer/mod.rs | 27 +++---------------- src/librustc/ty/relate.rs | 12 ++++----- 3 files changed, 10 insertions(+), 31 deletions(-) diff --git a/src/librustc/infer/canonical/canonicalizer.rs b/src/librustc/infer/canonical/canonicalizer.rs index 3d57a89493e..db724875b8a 100644 --- a/src/librustc/infer/canonical/canonicalizer.rs +++ b/src/librustc/infer/canonical/canonicalizer.rs @@ -693,7 +693,7 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> { const_var: &'tcx ty::Const<'tcx> ) -> &'tcx ty::Const<'tcx> { let infcx = self.infcx.expect("encountered const-var without infcx"); - let bound_to = infcx.resolve_const_var(const_var); + let bound_to = infcx.shallow_resolve(const_var); if bound_to != const_var { self.fold_const(bound_to) } else { diff --git a/src/librustc/infer/mod.rs b/src/librustc/infer/mod.rs index 663acd67dcd..e1d77a97c11 100644 --- a/src/librustc/infer/mod.rs +++ b/src/librustc/infer/mod.rs @@ -1351,23 +1351,6 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { } } - pub fn resolve_const_var( - &self, - ct: &'tcx ty::Const<'tcx> - ) -> &'tcx ty::Const<'tcx> { - if let ty::Const { val: ConstValue::Infer(InferConst::Var(v)), .. } = ct { - self.const_unification_table - .borrow_mut() - .probe_value(*v) - .val - .known() - .map(|c| self.resolve_const_var(c)) - .unwrap_or(ct) - } else { - ct - } - } - pub fn fully_resolve>(&self, value: &T) -> FixupResult<'tcx, T> { /*! * Attempts to resolve all type/region/const variables in @@ -1586,7 +1569,7 @@ impl<'a, 'tcx> ShallowResolver<'a, 'tcx> { // it can be resolved to an int/float variable, which // can then be recursively resolved, hence the // recursion. Note though that we prevent type - // variables from unifyxing to other type variables + // variables from unifying to other type variables // directly (though they may be embedded // structurally), and we prevent cycles in any case, // so this recursion should always be of very limited @@ -1626,17 +1609,15 @@ impl<'a, 'tcx> TypeFolder<'tcx> for ShallowResolver<'a, 'tcx> { } fn fold_const(&mut self, ct: &'tcx ty::Const<'tcx>) -> &'tcx ty::Const<'tcx> { - match ct { - ty::Const { val: ConstValue::Infer(InferConst::Var(vid)), .. } => { + if let ty::Const { val: ConstValue::Infer(InferConst::Var(vid)), .. } = ct { self.infcx.const_unification_table .borrow_mut() .probe_value(*vid) .val .known() - .map(|c| self.fold_const(c)) .unwrap_or(ct) - } - _ => ct, + } else { + ct } } } diff --git a/src/librustc/ty/relate.rs b/src/librustc/ty/relate.rs index a6bfc2dee61..ca54f63b83a 100644 --- a/src/librustc/ty/relate.rs +++ b/src/librustc/ty/relate.rs @@ -594,13 +594,11 @@ pub fn super_relate_consts>( ty: a.ty, })) } - (ConstValue::ByRef { .. }, _) => { - bug!( - "non-Scalar ConstValue encountered in super_relate_consts {:?} {:?}", - a, - b, - ); - } + + // FIXME(const_generics): we should either handle `Scalar::Ptr` or add a comment + // saying that we're not handling it intentionally. + + // FIXME(const_generics): handle `ConstValue::ByRef` and `ConstValue::Slice`. // FIXME(const_generics): this is wrong, as it is a projection (ConstValue::Unevaluated(a_def_id, a_substs),