From 9a9aa5b46aa0c81a6dad3a3377d6b7d2e65a93c7 Mon Sep 17 00:00:00 2001 From: varkor Date: Wed, 20 Feb 2019 01:13:49 +0000 Subject: [PATCH] Implement Hash for new types Co-Authored-By: Gabriel Smith --- src/librustc/ich/impls_ty.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/librustc/ich/impls_ty.rs b/src/librustc/ich/impls_ty.rs index f77a88128f2..21988de9018 100644 --- a/src/librustc/ich/impls_ty.rs +++ b/src/librustc/ich/impls_ty.rs @@ -74,6 +74,7 @@ fn hash_stable(&self, match self { ty::subst::UnpackedKind::Lifetime(lt) => lt.hash_stable(hcx, hasher), ty::subst::UnpackedKind::Type(ty) => ty.hash_stable(hcx, hasher), + ty::subst::UnpackedKind::Const(ct) => ct.hash_stable(hcx, hasher), } } } @@ -134,6 +135,15 @@ fn hash_stable(&self, } } +impl<'gcx, 'tcx> HashStable> for ty::ConstVid<'tcx> { + #[inline] + fn hash_stable(&self, + hcx: &mut StableHashingContext<'gcx>, + hasher: &mut StableHasher) { + self.index.hash_stable(hcx, hasher); + } +} + impl<'gcx> HashStable> for ty::BoundVar { #[inline] fn hash_stable(&self, @@ -297,6 +307,14 @@ fn hash_stable(&self, } } +impl_stable_hash_for!( + impl<'tcx> for enum ty::InferConst<'tcx> [ ty::InferConst ] { + Var(vid), + Fresh(i), + Canonical(debruijn, var), + } +); + impl_stable_hash_for!(enum ty::VariantDiscr { Explicit(def_id), Relative(distance) @@ -310,11 +328,14 @@ fn hash_stable(&self, impl_stable_hash_for!( impl<'tcx> for enum mir::interpret::ConstValue<'tcx> [ mir::interpret::ConstValue ] { + Param(param), + Infer(infer), Scalar(val), Slice(a, b), ByRef(ptr, alloc), } ); + impl_stable_hash_for!(struct crate::mir::interpret::RawConst<'tcx> { alloc_id, ty, @@ -518,6 +539,7 @@ impl<'tcx, O> for enum mir::interpret::EvalErrorKind<'tcx, O> impl_stable_hash_for!(enum ty::GenericParamDefKind { Lifetime, Type { has_default, object_lifetime_default, synthetic }, + Const, }); impl_stable_hash_for!( @@ -736,6 +758,11 @@ fn hash_stable(&self, } } +impl_stable_hash_for!(struct ty::ParamConst { + index, + name +}); + impl_stable_hash_for!(struct ty::ParamTy { idx, name