use ty::Unevaluated
instead of def substs pair
This commit is contained in:
parent
031243898e
commit
caa975c89e
19 changed files with 66 additions and 86 deletions
|
@ -303,12 +303,11 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query try_unify_abstract_consts(key: (
|
||||
(ty::WithOptConstParam<DefId>, SubstsRef<'tcx>),
|
||||
(ty::WithOptConstParam<DefId>, SubstsRef<'tcx>)
|
||||
ty::Unevaluated<'tcx>, ty::Unevaluated<'tcx>
|
||||
)) -> bool {
|
||||
desc {
|
||||
|tcx| "trying to unify the generic constants {} and {}",
|
||||
tcx.def_path_str(key.0.0.did), tcx.def_path_str(key.1.0.did)
|
||||
tcx.def_path_str(key.0.def.did), tcx.def_path_str(key.1.def.did)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ use super::ScalarInt;
|
|||
///
|
||||
/// We check for all possible substs in `fn default_anon_const_substs`,
|
||||
/// so refer to that check for more info.
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable, Lift)]
|
||||
#[derive(Hash, HashStable)]
|
||||
pub struct Unevaluated<'tcx> {
|
||||
pub def: ty::WithOptConstParam<DefId>,
|
||||
|
|
|
@ -252,8 +252,8 @@ impl FlagComputation {
|
|||
ty::PredicateKind::ClosureKind(_def_id, substs, _kind) => {
|
||||
self.add_substs(substs);
|
||||
}
|
||||
ty::PredicateKind::ConstEvaluatable(_def_id, substs) => {
|
||||
self.add_substs(substs);
|
||||
ty::PredicateKind::ConstEvaluatable(uv) => {
|
||||
self.add_unevaluated_const(uv);
|
||||
}
|
||||
ty::PredicateKind::ConstEquate(expected, found) => {
|
||||
self.add_const(expected);
|
||||
|
|
|
@ -406,7 +406,7 @@ crate struct PredicateInner<'tcx> {
|
|||
}
|
||||
|
||||
#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
|
||||
static_assert_size!(PredicateInner<'_>, 48);
|
||||
static_assert_size!(PredicateInner<'_>, 56);
|
||||
|
||||
#[derive(Clone, Copy, Lift)]
|
||||
pub struct Predicate<'tcx> {
|
||||
|
@ -502,7 +502,7 @@ pub enum PredicateKind<'tcx> {
|
|||
Coerce(CoercePredicate<'tcx>),
|
||||
|
||||
/// Constant initializer must evaluate successfully.
|
||||
ConstEvaluatable(ty::WithOptConstParam<DefId>, SubstsRef<'tcx>),
|
||||
ConstEvaluatable(ty::Unevaluated<'tcx>),
|
||||
|
||||
/// Constants must be equal. The first component is the const that is expected.
|
||||
ConstEquate(&'tcx Const<'tcx>, &'tcx Const<'tcx>),
|
||||
|
|
|
@ -2294,8 +2294,8 @@ define_print_and_forward_display! {
|
|||
print_value_path(closure_def_id, &[]),
|
||||
write("` implements the trait `{}`", kind))
|
||||
}
|
||||
ty::PredicateKind::ConstEvaluatable(def, substs) => {
|
||||
p!("the constant `", print_value_path(def.did, substs), "` can be evaluated")
|
||||
ty::PredicateKind::ConstEvaluatable(uv) => {
|
||||
p!("the constant `", print_value_path(uv.def.did, uv.substs_.map_or(&[], |x| x)), "` can be evaluated")
|
||||
}
|
||||
ty::PredicateKind::ConstEquate(c1, c2) => {
|
||||
p!("the constant `", print(c1), "` equals `", print(c2), "`")
|
||||
|
|
|
@ -579,7 +579,7 @@ pub fn super_relate_consts<R: TypeRelation<'tcx>>(
|
|||
(ty::ConstKind::Unevaluated(au), ty::ConstKind::Unevaluated(bu))
|
||||
if tcx.features().const_evaluatable_checked =>
|
||||
{
|
||||
tcx.try_unify_abstract_consts(((au.def, au.substs(tcx)), (bu.def, bu.substs(tcx))))
|
||||
tcx.try_unify_abstract_consts((au, bu))
|
||||
}
|
||||
|
||||
// While this is slightly incorrect, it shouldn't matter for `min_const_generics`
|
||||
|
|
|
@ -190,8 +190,8 @@ impl fmt::Debug for ty::PredicateKind<'tcx> {
|
|||
ty::PredicateKind::ClosureKind(closure_def_id, closure_substs, kind) => {
|
||||
write!(f, "ClosureKind({:?}, {:?}, {:?})", closure_def_id, closure_substs, kind)
|
||||
}
|
||||
ty::PredicateKind::ConstEvaluatable(def_id, substs) => {
|
||||
write!(f, "ConstEvaluatable({:?}, {:?})", def_id, substs)
|
||||
ty::PredicateKind::ConstEvaluatable(uv) => {
|
||||
write!(f, "ConstEvaluatable({:?}, {:?})", uv.def, uv.substs_)
|
||||
}
|
||||
ty::PredicateKind::ConstEquate(c1, c2) => write!(f, "ConstEquate({:?}, {:?})", c1, c2),
|
||||
ty::PredicateKind::TypeWellFormedFromEnv(ty) => {
|
||||
|
@ -447,8 +447,8 @@ impl<'a, 'tcx> Lift<'tcx> for ty::PredicateKind<'a> {
|
|||
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
||||
Some(ty::PredicateKind::ObjectSafe(trait_def_id))
|
||||
}
|
||||
ty::PredicateKind::ConstEvaluatable(def_id, substs) => {
|
||||
tcx.lift(substs).map(|substs| ty::PredicateKind::ConstEvaluatable(def_id, substs))
|
||||
ty::PredicateKind::ConstEvaluatable(uv) => {
|
||||
tcx.lift(uv).map(|uv| ty::PredicateKind::ConstEvaluatable(uv))
|
||||
}
|
||||
ty::PredicateKind::ConstEquate(c1, c2) => {
|
||||
tcx.lift((c1, c2)).map(|(c1, c2)| ty::PredicateKind::ConstEquate(c1, c2))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue