Deny const variables as well

This commit is contained in:
Michael Goulet 2022-10-19 17:10:19 +00:00
parent 1e2eb97c6e
commit 6b0ef9c810
3 changed files with 12 additions and 5 deletions

View File

@ -5,6 +5,7 @@ use crate::mir::interpret::{AllocId, ConstValue, Scalar};
use crate::ty::subst::{InternalSubsts, SubstsRef};
use crate::ty::ParamEnv;
use crate::ty::{self, TyCtxt, TypeVisitable};
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
use rustc_errors::ErrorGuaranteed;
use rustc_hir::def_id::DefId;
use rustc_macros::HashStable;
@ -108,7 +109,6 @@ impl<'tcx> ConstKind<'tcx> {
/// An inference variable for a const, for use in const generics.
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable, Hash)]
#[derive(HashStable)]
pub enum InferConst<'tcx> {
/// Infer the value of the const.
Var(ty::ConstVid<'tcx>),
@ -116,6 +116,15 @@ pub enum InferConst<'tcx> {
Fresh(u32),
}
impl<CTX> HashStable<CTX> for InferConst<'_> {
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
match self {
InferConst::Var(_) => panic!("const variables should not be hashed: {self:?}"),
InferConst::Fresh(i) => i.hash_stable(hcx, hasher),
}
}
}
enum EvalMode {
Typeck,
Mir,

View File

@ -200,9 +200,7 @@ impl<'tcx> CtxtInterners<'tcx> {
// It's impossible to hash inference variables (and will ICE), so we don't need to try to cache them.
// Without incremental, we rarely stable-hash types, so let's not do it proactively.
let stable_hash = if flags
.flags
.intersects(TypeFlags::HAS_RE_INFER | TypeFlags::HAS_TY_INFER)
let stable_hash = if flags.flags.intersects(TypeFlags::NEEDS_INFER)
|| sess.opts.incremental.is_none()
{
Fingerprint::ZERO

View File

@ -676,7 +676,7 @@ impl<CTX> HashStable<CTX> for InferTy {
discriminant(self).hash_stable(ctx, hasher);
match self {
TyVar(_) | IntVar(_) | FloatVar(_) => {
panic!("inference variables should not be hashed: {self:?}")
panic!("type variables should not be hashed: {self:?}")
}
FreshTy(v) | FreshIntTy(v) | FreshFloatTy(v) => v.hash_stable(ctx, hasher),
}