From 825a7cc65c4b21fd4f1b8f3b9ad204594de1e8c2 Mon Sep 17 00:00:00 2001 From: Ellen Date: Mon, 1 Aug 2022 15:42:38 +0100 Subject: [PATCH 1/2] make `PlaceholderConst` not store the type of the const --- compiler/rustc_infer/src/infer/canonical/canonicalizer.rs | 6 +++--- compiler/rustc_infer/src/infer/canonical/mod.rs | 4 ++-- compiler/rustc_infer/src/infer/higher_ranked/mod.rs | 2 +- compiler/rustc_infer/src/infer/mod.rs | 2 +- compiler/rustc_middle/src/infer/canonical.rs | 6 +++--- compiler/rustc_middle/src/ty/mod.rs | 2 +- compiler/rustc_trait_selection/src/traits/project.rs | 2 +- compiler/rustc_traits/src/chalk/mod.rs | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs b/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs index 9c30c81123b14..30a46de5e5152 100644 --- a/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs +++ b/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs @@ -511,7 +511,7 @@ impl<'cx, 'tcx> TypeFolder<'tcx> for Canonicalizer<'cx, 'tcx> { } ty::ConstKind::Placeholder(placeholder) => { return self.canonicalize_const_var( - CanonicalVarInfo { kind: CanonicalVarKind::PlaceholderConst(placeholder) }, + CanonicalVarInfo { kind: CanonicalVarKind::PlaceholderConst(placeholder, ct.ty()) }, ct, ); } @@ -695,11 +695,11 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> { ..placeholder }) } - CanonicalVarKind::PlaceholderConst(placeholder) => { + CanonicalVarKind::PlaceholderConst(placeholder, t) => { CanonicalVarKind::PlaceholderConst(ty::Placeholder { universe: reverse_universe_map[&placeholder.universe], ..placeholder - }) + }, t) } }, }) diff --git a/compiler/rustc_infer/src/infer/canonical/mod.rs b/compiler/rustc_infer/src/infer/canonical/mod.rs index f251d561c6087..a9294a85e5189 100644 --- a/compiler/rustc_infer/src/infer/canonical/mod.rs +++ b/compiler/rustc_infer/src/infer/canonical/mod.rs @@ -144,13 +144,13 @@ impl<'cx, 'tcx> InferCtxt<'cx, 'tcx> { ) .into(), - CanonicalVarKind::PlaceholderConst(ty::PlaceholderConst { universe, name }) => { + CanonicalVarKind::PlaceholderConst(ty::PlaceholderConst { universe, name }, ty) => { let universe_mapped = universe_map(universe); let placeholder_mapped = ty::PlaceholderConst { universe: universe_mapped, name }; self.tcx .mk_const(ty::ConstS { kind: ty::ConstKind::Placeholder(placeholder_mapped), - ty: name.ty, + ty, }) .into() } diff --git a/compiler/rustc_infer/src/infer/higher_ranked/mod.rs b/compiler/rustc_infer/src/infer/higher_ranked/mod.rs index ed257c144e0aa..9bdd437333bb6 100644 --- a/compiler/rustc_infer/src/infer/higher_ranked/mod.rs +++ b/compiler/rustc_infer/src/infer/higher_ranked/mod.rs @@ -97,7 +97,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { self.tcx.mk_const(ty::ConstS { kind: ty::ConstKind::Placeholder(ty::PlaceholderConst { universe: next_universe, - name: ty::BoundConst { var: bound_var, ty }, + name: bound_var, }), ty, }) diff --git a/compiler/rustc_infer/src/infer/mod.rs b/compiler/rustc_infer/src/infer/mod.rs index 6d5f4993d8d29..34c22b9fcd2d4 100644 --- a/compiler/rustc_infer/src/infer/mod.rs +++ b/compiler/rustc_infer/src/infer/mod.rs @@ -2069,7 +2069,7 @@ fn replace_param_and_infer_substs_with_placeholder<'tcx>( ty, kind: ty::ConstKind::Placeholder(ty::PlaceholderConst { universe: ty::UniverseIndex::ROOT, - name: ty::BoundConst { ty, var: ty::BoundVar::from_usize(idx) }, + name: ty::BoundVar::from_usize(idx), }), }) .into() diff --git a/compiler/rustc_middle/src/infer/canonical.rs b/compiler/rustc_middle/src/infer/canonical.rs index c6fe3e721032f..200de9079c218 100644 --- a/compiler/rustc_middle/src/infer/canonical.rs +++ b/compiler/rustc_middle/src/infer/canonical.rs @@ -105,7 +105,7 @@ impl<'tcx> CanonicalVarInfo<'tcx> { CanonicalVarKind::Region(_) => true, CanonicalVarKind::PlaceholderRegion(..) => false, CanonicalVarKind::Const(..) => true, - CanonicalVarKind::PlaceholderConst(_) => false, + CanonicalVarKind::PlaceholderConst(_, _) => false, } } } @@ -133,7 +133,7 @@ pub enum CanonicalVarKind<'tcx> { Const(ty::UniverseIndex, Ty<'tcx>), /// A "placeholder" that represents "any const". - PlaceholderConst(ty::PlaceholderConst<'tcx>), + PlaceholderConst(ty::PlaceholderConst<'tcx>, Ty<'tcx>), } impl<'tcx> CanonicalVarKind<'tcx> { @@ -148,7 +148,7 @@ impl<'tcx> CanonicalVarKind<'tcx> { CanonicalVarKind::Region(ui) => ui, CanonicalVarKind::PlaceholderRegion(placeholder) => placeholder.universe, CanonicalVarKind::Const(ui, _) => ui, - CanonicalVarKind::PlaceholderConst(placeholder) => placeholder.universe, + CanonicalVarKind::PlaceholderConst(placeholder, _) => placeholder.universe, } } } diff --git a/compiler/rustc_middle/src/ty/mod.rs b/compiler/rustc_middle/src/ty/mod.rs index da9d51a29b18c..89068032d7ced 100644 --- a/compiler/rustc_middle/src/ty/mod.rs +++ b/compiler/rustc_middle/src/ty/mod.rs @@ -1200,7 +1200,7 @@ pub struct BoundConst<'tcx> { pub ty: Ty<'tcx>, } -pub type PlaceholderConst<'tcx> = Placeholder>; +pub type PlaceholderConst<'tcx> = Placeholder; /// A `DefId` which, in case it is a const argument, is potentially bundled with /// the `DefId` of the generic parameter it instantiates. diff --git a/compiler/rustc_trait_selection/src/traits/project.rs b/compiler/rustc_trait_selection/src/traits/project.rs index 9de4d3a646cb3..c4b7c2ea638c2 100644 --- a/compiler/rustc_trait_selection/src/traits/project.rs +++ b/compiler/rustc_trait_selection/src/traits/project.rs @@ -746,7 +746,7 @@ impl<'tcx> TypeFolder<'tcx> for BoundVarReplacer<'_, 'tcx> { let universe = self.universe_for(debruijn); let p = ty::PlaceholderConst { universe, - name: ty::BoundConst { var: bound_const, ty: ct.ty() }, + name: bound_const, }; self.mapped_consts.insert(p, bound_const); self.infcx diff --git a/compiler/rustc_traits/src/chalk/mod.rs b/compiler/rustc_traits/src/chalk/mod.rs index db7ea4253e36c..f76386fa720df 100644 --- a/compiler/rustc_traits/src/chalk/mod.rs +++ b/compiler/rustc_traits/src/chalk/mod.rs @@ -76,7 +76,7 @@ pub(crate) fn evaluate_goal<'tcx>( chalk_ir::UniverseIndex { counter: ui.index() }, ), CanonicalVarKind::Const(_ui, _ty) => unimplemented!(), - CanonicalVarKind::PlaceholderConst(_pc) => unimplemented!(), + CanonicalVarKind::PlaceholderConst(_pc, _ty) => unimplemented!(), }), ), value: obligation.value.lower_into(interner), From 49d001c5f364193350f5ef92522f3be7828e34e8 Mon Sep 17 00:00:00 2001 From: Ellen Date: Mon, 1 Aug 2022 20:15:58 +0100 Subject: [PATCH 2/2] fmt... --- .../src/infer/canonical/canonicalizer.rs | 15 ++++++++++----- .../rustc_trait_selection/src/traits/project.rs | 5 +---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs b/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs index 30a46de5e5152..ca7862c9dc467 100644 --- a/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs +++ b/compiler/rustc_infer/src/infer/canonical/canonicalizer.rs @@ -511,7 +511,9 @@ impl<'cx, 'tcx> TypeFolder<'tcx> for Canonicalizer<'cx, 'tcx> { } ty::ConstKind::Placeholder(placeholder) => { return self.canonicalize_const_var( - CanonicalVarInfo { kind: CanonicalVarKind::PlaceholderConst(placeholder, ct.ty()) }, + CanonicalVarInfo { + kind: CanonicalVarKind::PlaceholderConst(placeholder, ct.ty()), + }, ct, ); } @@ -696,10 +698,13 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> { }) } CanonicalVarKind::PlaceholderConst(placeholder, t) => { - CanonicalVarKind::PlaceholderConst(ty::Placeholder { - universe: reverse_universe_map[&placeholder.universe], - ..placeholder - }, t) + CanonicalVarKind::PlaceholderConst( + ty::Placeholder { + universe: reverse_universe_map[&placeholder.universe], + ..placeholder + }, + t, + ) } }, }) diff --git a/compiler/rustc_trait_selection/src/traits/project.rs b/compiler/rustc_trait_selection/src/traits/project.rs index c4b7c2ea638c2..9c2f1371b02bc 100644 --- a/compiler/rustc_trait_selection/src/traits/project.rs +++ b/compiler/rustc_trait_selection/src/traits/project.rs @@ -744,10 +744,7 @@ impl<'tcx> TypeFolder<'tcx> for BoundVarReplacer<'_, 'tcx> { } ty::ConstKind::Bound(debruijn, bound_const) if debruijn >= self.current_index => { let universe = self.universe_for(debruijn); - let p = ty::PlaceholderConst { - universe, - name: bound_const, - }; + let p = ty::PlaceholderConst { universe, name: bound_const }; self.mapped_consts.insert(p, bound_const); self.infcx .tcx