Rollup merge of #139811 - yotamofek:pr/newtype_cleanups, r=oli-obk

Use `newtype_index!`-generated types more idiomatically

Continuation of sorts of #139674
Shouldn't affect anything, just makes some code simpler
This commit is contained in:
Matthias Krüger 2025-04-14 21:55:40 +02:00 committed by GitHub
commit 04d10520f0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 61 additions and 87 deletions

View file

@ -448,8 +448,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
generic_args.args.insert_many( generic_args.args.insert_many(
0, 0,
(start.as_u32()..end.as_u32()).map(|i| { (start..end).map(|id| {
let id = NodeId::from_u32(i);
let l = self.lower_lifetime_anon_in_path(id, elided_lifetime_span); let l = self.lower_lifetime_anon_in_path(id, elided_lifetime_span);
GenericArg::Lifetime(l) GenericArg::Lifetime(l)
}), }),

View file

@ -338,8 +338,7 @@ fn sccs_info<'tcx>(infcx: &BorrowckInferCtxt<'tcx>, sccs: &ConstraintSccs) {
let num_components = sccs.num_sccs(); let num_components = sccs.num_sccs();
let mut components = vec![FxIndexSet::default(); num_components]; let mut components = vec![FxIndexSet::default(); num_components];
for (reg_var_idx, scc_idx) in sccs.scc_indices().iter().enumerate() { for (reg_var, scc_idx) in sccs.scc_indices().iter_enumerated() {
let reg_var = ty::RegionVid::from_usize(reg_var_idx);
let origin = var_to_origin.get(&reg_var).unwrap_or(&RegionCtxt::Unknown); let origin = var_to_origin.get(&reg_var).unwrap_or(&RegionCtxt::Unknown);
components[scc_idx.as_usize()].insert((reg_var, *origin)); components[scc_idx.as_usize()].insert((reg_var, *origin));
} }

View file

@ -3,7 +3,6 @@ use std::collections::hash_map::Entry;
use rustc_codegen_ssa::mir::debuginfo::{DebugScope, FunctionDebugContext}; use rustc_codegen_ssa::mir::debuginfo::{DebugScope, FunctionDebugContext};
use rustc_codegen_ssa::traits::*; use rustc_codegen_ssa::traits::*;
use rustc_data_structures::fx::FxHashMap; use rustc_data_structures::fx::FxHashMap;
use rustc_index::Idx;
use rustc_index::bit_set::DenseBitSet; use rustc_index::bit_set::DenseBitSet;
use rustc_middle::mir::{Body, SourceScope}; use rustc_middle::mir::{Body, SourceScope};
use rustc_middle::ty::layout::{FnAbiOf, HasTypingEnv}; use rustc_middle::ty::layout::{FnAbiOf, HasTypingEnv};
@ -43,8 +42,7 @@ pub(crate) fn compute_mir_scopes<'ll, 'tcx>(
let mut instantiated = DenseBitSet::new_empty(mir.source_scopes.len()); let mut instantiated = DenseBitSet::new_empty(mir.source_scopes.len());
let mut discriminators = FxHashMap::default(); let mut discriminators = FxHashMap::default();
// Instantiate all scopes. // Instantiate all scopes.
for idx in 0..mir.source_scopes.len() { for scope in mir.source_scopes.indices() {
let scope = SourceScope::new(idx);
make_mir_scope( make_mir_scope(
cx, cx,
instance, instance,

View file

@ -47,12 +47,9 @@ impl DefPathTable {
debug_assert_eq!(self.stable_crate_id, def_path_hash.stable_crate_id()); debug_assert_eq!(self.stable_crate_id, def_path_hash.stable_crate_id());
let local_hash = def_path_hash.local_hash(); let local_hash = def_path_hash.local_hash();
let index = { let index = self.index_to_key.push(key);
let index = DefIndex::from(self.index_to_key.len()); debug!("DefPathTable::insert() - {key:?} <-> {index:?}");
debug!("DefPathTable::insert() - {:?} <-> {:?}", key, index);
self.index_to_key.push(key);
index
};
self.def_path_hashes.push(local_hash); self.def_path_hashes.push(local_hash);
debug_assert!(self.def_path_hashes.len() == self.index_to_key.len()); debug_assert!(self.def_path_hashes.len() == self.index_to_key.len());

View file

@ -606,7 +606,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
// with placeholders, which imply nothing about outlives bounds, and then // with placeholders, which imply nothing about outlives bounds, and then
// prove below that the hidden types are well formed. // prove below that the hidden types are well formed.
let universe = infcx.create_next_universe(); let universe = infcx.create_next_universe();
let mut idx = 0; let mut idx = ty::BoundVar::ZERO;
let mapping: FxIndexMap<_, _> = collector let mapping: FxIndexMap<_, _> = collector
.types .types
.iter() .iter()
@ -623,10 +623,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
tcx, tcx,
ty::Placeholder { ty::Placeholder {
universe, universe,
bound: ty::BoundTy { bound: ty::BoundTy { var: idx, kind: ty::BoundTyKind::Anon },
var: ty::BoundVar::from_usize(idx),
kind: ty::BoundTyKind::Anon,
},
}, },
), ),
) )

View file

@ -618,9 +618,7 @@ impl<'tcx> RegionConstraintCollector<'_, 'tcx> {
RegionVid::from(value_count)..RegionVid::from(self.storage.unification_table.len()); RegionVid::from(value_count)..RegionVid::from(self.storage.unification_table.len());
( (
range.clone(), range.clone(),
(range.start.index()..range.end.index()) (range.start..range.end).map(|index| self.storage.var_infos[index].origin).collect(),
.map(|index| self.storage.var_infos[ty::RegionVid::from(index)].origin)
.collect(),
) )
} }

View file

@ -30,11 +30,12 @@ fn const_vars_since_snapshot<'tcx>(
snapshot_var_len: usize, snapshot_var_len: usize,
) -> (Range<ConstVid>, Vec<ConstVariableOrigin>) { ) -> (Range<ConstVid>, Vec<ConstVariableOrigin>) {
let range = vars_since_snapshot(table, snapshot_var_len); let range = vars_since_snapshot(table, snapshot_var_len);
let range = range.start.vid..range.end.vid;
( (
range.start.vid..range.end.vid, range.clone(),
(range.start.index()..range.end.index()) range
.map(|index| match table.probe_value(ConstVid::from_u32(index)) { .map(|index| match table.probe_value(index) {
ConstVariableValue::Known { value: _ } => { ConstVariableValue::Known { value: _ } => {
ConstVariableOrigin { param_def_id: None, span: rustc_span::DUMMY_SP } ConstVariableOrigin { param_def_id: None, span: rustc_span::DUMMY_SP }
} }

View file

@ -531,12 +531,12 @@ fn write_mir_intro<'tcx>(
// construct a scope tree and write it out // construct a scope tree and write it out
let mut scope_tree: FxHashMap<SourceScope, Vec<SourceScope>> = Default::default(); let mut scope_tree: FxHashMap<SourceScope, Vec<SourceScope>> = Default::default();
for (index, scope_data) in body.source_scopes.iter().enumerate() { for (index, scope_data) in body.source_scopes.iter_enumerated() {
if let Some(parent) = scope_data.parent_scope { if let Some(parent) = scope_data.parent_scope {
scope_tree.entry(parent).or_default().push(SourceScope::new(index)); scope_tree.entry(parent).or_default().push(index);
} else { } else {
// Only the argument scope has no parent, because it's the root. // Only the argument scope has no parent, because it's the root.
assert_eq!(index, OUTERMOST_SOURCE_SCOPE.index()); assert_eq!(index, OUTERMOST_SOURCE_SCOPE);
} }
} }

View file

@ -278,7 +278,7 @@ impl<'tcx> TyCtxt<'tcx> {
where where
T: TypeFoldable<TyCtxt<'tcx>>, T: TypeFoldable<TyCtxt<'tcx>>,
{ {
let shift_bv = |bv: ty::BoundVar| ty::BoundVar::from_usize(bv.as_usize() + bound_vars); let shift_bv = |bv: ty::BoundVar| bv + bound_vars;
self.replace_escaping_bound_vars_uncached( self.replace_escaping_bound_vars_uncached(
value, value,
FnMutDelegate { FnMutDelegate {

View file

@ -231,9 +231,7 @@ impl MaxUniverse {
impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for MaxUniverse { impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for MaxUniverse {
fn visit_ty(&mut self, t: Ty<'tcx>) { fn visit_ty(&mut self, t: Ty<'tcx>) {
if let ty::Placeholder(placeholder) = t.kind() { if let ty::Placeholder(placeholder) = t.kind() {
self.max_universe = ty::UniverseIndex::from_u32( self.max_universe = self.max_universe.max(placeholder.universe);
self.max_universe.as_u32().max(placeholder.universe.as_u32()),
);
} }
t.super_visit_with(self) t.super_visit_with(self)
@ -241,9 +239,7 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for MaxUniverse {
fn visit_const(&mut self, c: ty::consts::Const<'tcx>) { fn visit_const(&mut self, c: ty::consts::Const<'tcx>) {
if let ty::ConstKind::Placeholder(placeholder) = c.kind() { if let ty::ConstKind::Placeholder(placeholder) = c.kind() {
self.max_universe = ty::UniverseIndex::from_u32( self.max_universe = self.max_universe.max(placeholder.universe);
self.max_universe.as_u32().max(placeholder.universe.as_u32()),
);
} }
c.super_visit_with(self) c.super_visit_with(self)
@ -251,9 +247,7 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for MaxUniverse {
fn visit_region(&mut self, r: ty::Region<'tcx>) { fn visit_region(&mut self, r: ty::Region<'tcx>) {
if let ty::RePlaceholder(placeholder) = r.kind() { if let ty::RePlaceholder(placeholder) = r.kind() {
self.max_universe = ty::UniverseIndex::from_u32( self.max_universe = self.max_universe.max(placeholder.universe);
self.max_universe.as_u32().max(placeholder.universe.as_u32()),
);
} }
} }
} }

View file

@ -191,7 +191,7 @@ impl<'tcx> ThirBuildCx<'tcx> {
let pointer_target = ExprKind::Field { let pointer_target = ExprKind::Field {
lhs: self.thir.exprs.push(expr), lhs: self.thir.exprs.push(expr),
variant_index: FIRST_VARIANT, variant_index: FIRST_VARIANT,
name: FieldIdx::from(0u32), name: FieldIdx::ZERO,
}; };
let arg = Expr { temp_lifetime, ty: pin_ty, span, kind: pointer_target }; let arg = Expr { temp_lifetime, ty: pin_ty, span, kind: pointer_target };
let arg = self.thir.exprs.push(arg); let arg = self.thir.exprs.push(arg);
@ -226,7 +226,7 @@ impl<'tcx> ThirBuildCx<'tcx> {
adt_def: self.tcx.adt_def(pin_did), adt_def: self.tcx.adt_def(pin_did),
variant_index: FIRST_VARIANT, variant_index: FIRST_VARIANT,
args, args,
fields: Box::new([FieldExpr { name: FieldIdx::from(0u32), expr }]), fields: Box::new([FieldExpr { name: FieldIdx::ZERO, expr }]),
user_ty: None, user_ty: None,
base: AdtExprBase::None, base: AdtExprBase::None,
})); }));

View file

@ -203,7 +203,7 @@ struct TransformVisitor<'tcx> {
impl<'tcx> TransformVisitor<'tcx> { impl<'tcx> TransformVisitor<'tcx> {
fn insert_none_ret_block(&self, body: &mut Body<'tcx>) -> BasicBlock { fn insert_none_ret_block(&self, body: &mut Body<'tcx>) -> BasicBlock {
let block = BasicBlock::new(body.basic_blocks.len()); let block = body.basic_blocks.next_index();
let source_info = SourceInfo::outermost(body.span); let source_info = SourceInfo::outermost(body.span);
let none_value = match self.coroutine_kind { let none_value = match self.coroutine_kind {
@ -1193,7 +1193,7 @@ fn insert_panic_block<'tcx>(
body: &mut Body<'tcx>, body: &mut Body<'tcx>,
message: AssertMessage<'tcx>, message: AssertMessage<'tcx>,
) -> BasicBlock { ) -> BasicBlock {
let assert_block = BasicBlock::new(body.basic_blocks.len()); let assert_block = body.basic_blocks.next_index();
let kind = TerminatorKind::Assert { let kind = TerminatorKind::Assert {
cond: Operand::Constant(Box::new(ConstOperand { cond: Operand::Constant(Box::new(ConstOperand {
span: body.span, span: body.span,

View file

@ -258,17 +258,16 @@ where
) -> Vec<(Place<'tcx>, Option<D::Path>)> { ) -> Vec<(Place<'tcx>, Option<D::Path>)> {
variant variant
.fields .fields
.iter() .iter_enumerated()
.enumerate() .map(|(field_idx, field)| {
.map(|(i, f)| { let subpath = self.elaborator.field_subpath(variant_path, field_idx);
let field = FieldIdx::new(i);
let subpath = self.elaborator.field_subpath(variant_path, field);
let tcx = self.tcx(); let tcx = self.tcx();
assert_eq!(self.elaborator.typing_env().typing_mode, ty::TypingMode::PostAnalysis); assert_eq!(self.elaborator.typing_env().typing_mode, ty::TypingMode::PostAnalysis);
let field_ty = match tcx let field_ty = match tcx.try_normalize_erasing_regions(
.try_normalize_erasing_regions(self.elaborator.typing_env(), f.ty(tcx, args)) self.elaborator.typing_env(),
{ field.ty(tcx, args),
) {
Ok(t) => t, Ok(t) => t,
Err(_) => Ty::new_error( Err(_) => Ty::new_error(
self.tcx(), self.tcx(),
@ -279,7 +278,7 @@ where
), ),
}; };
(tcx.mk_place_field(base_place, field, field_ty), subpath) (tcx.mk_place_field(base_place, field_idx, field_ty), subpath)
}) })
.collect() .collect()
} }

View file

@ -903,9 +903,9 @@ fn inline_call<'tcx, I: Inliner<'tcx>>(
let mut integrator = Integrator { let mut integrator = Integrator {
args: &args, args: &args,
new_locals: Local::new(caller_body.local_decls.len()).., new_locals: caller_body.local_decls.next_index()..,
new_scopes: SourceScope::new(caller_body.source_scopes.len()).., new_scopes: caller_body.source_scopes.next_index()..,
new_blocks: BasicBlock::new(caller_body.basic_blocks.len()).., new_blocks: caller_body.basic_blocks.next_index()..,
destination: destination_local, destination: destination_local,
callsite_scope: caller_body.source_scopes[callsite.source_info.scope].clone(), callsite_scope: caller_body.source_scopes[callsite.source_info.scope].clone(),
callsite, callsite,
@ -1169,7 +1169,7 @@ impl Integrator<'_, '_> {
if idx < self.args.len() { if idx < self.args.len() {
self.args[idx] self.args[idx]
} else { } else {
Local::new(self.new_locals.start.index() + (idx - self.args.len())) self.new_locals.start + (idx - self.args.len())
} }
}; };
trace!("mapping local `{:?}` to `{:?}`", local, new); trace!("mapping local `{:?}` to `{:?}`", local, new);
@ -1177,13 +1177,13 @@ impl Integrator<'_, '_> {
} }
fn map_scope(&self, scope: SourceScope) -> SourceScope { fn map_scope(&self, scope: SourceScope) -> SourceScope {
let new = SourceScope::new(self.new_scopes.start.index() + scope.index()); let new = self.new_scopes.start + scope.index();
trace!("mapping scope `{:?}` to `{:?}`", scope, new); trace!("mapping scope `{:?}` to `{:?}`", scope, new);
new new
} }
fn map_block(&self, block: BasicBlock) -> BasicBlock { fn map_block(&self, block: BasicBlock) -> BasicBlock {
let new = BasicBlock::new(self.new_blocks.start.index() + block.index()); let new = self.new_blocks.start + block.index();
trace!("mapping block `{:?}` to `{:?}`", block, new); trace!("mapping block `{:?}` to `{:?}`", block, new);
new new
} }

View file

@ -181,7 +181,7 @@ impl<'tcx> MirPatch<'tcx> {
/// Queues the addition of a new basic block. /// Queues the addition of a new basic block.
pub(crate) fn new_block(&mut self, data: BasicBlockData<'tcx>) -> BasicBlock { pub(crate) fn new_block(&mut self, data: BasicBlockData<'tcx>) -> BasicBlock {
let block = BasicBlock::new(self.term_patch_map.len()); let block = self.term_patch_map.next_index();
debug!("MirPatch: new_block: {:?}: {:?}", block, data); debug!("MirPatch: new_block: {:?}: {:?}", block, data);
self.new_blocks.push(data); self.new_blocks.push(data);
self.term_patch_map.push(None); self.term_patch_map.push(None);

View file

@ -18,7 +18,7 @@ use either::{Left, Right};
use rustc_const_eval::check_consts::{ConstCx, qualifs}; use rustc_const_eval::check_consts::{ConstCx, qualifs};
use rustc_data_structures::fx::FxHashSet; use rustc_data_structures::fx::FxHashSet;
use rustc_hir as hir; use rustc_hir as hir;
use rustc_index::{Idx, IndexSlice, IndexVec}; use rustc_index::{IndexSlice, IndexVec};
use rustc_middle::mir::visit::{MutVisitor, MutatingUseContext, PlaceContext, Visitor}; use rustc_middle::mir::visit::{MutVisitor, MutatingUseContext, PlaceContext, Visitor};
use rustc_middle::mir::*; use rustc_middle::mir::*;
use rustc_middle::ty::{self, GenericArgs, List, Ty, TyCtxt, TypeVisitableExt}; use rustc_middle::ty::{self, GenericArgs, List, Ty, TyCtxt, TypeVisitableExt};
@ -864,17 +864,21 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> {
new_temp new_temp
} }
fn promote_candidate(mut self, candidate: Candidate, next_promoted_id: usize) -> Body<'tcx> { fn promote_candidate(
mut self,
candidate: Candidate,
next_promoted_index: Promoted,
) -> Body<'tcx> {
let def = self.source.source.def_id(); let def = self.source.source.def_id();
let (mut rvalue, promoted_op) = { let (mut rvalue, promoted_op) = {
let promoted = &mut self.promoted; let promoted = &mut self.promoted;
let promoted_id = Promoted::new(next_promoted_id);
let tcx = self.tcx; let tcx = self.tcx;
let mut promoted_operand = |ty, span| { let mut promoted_operand = |ty, span| {
promoted.span = span; promoted.span = span;
promoted.local_decls[RETURN_PLACE] = LocalDecl::new(ty, span); promoted.local_decls[RETURN_PLACE] = LocalDecl::new(ty, span);
let args = tcx.erase_regions(GenericArgs::identity_for_item(tcx, def)); let args = tcx.erase_regions(GenericArgs::identity_for_item(tcx, def));
let uneval = mir::UnevaluatedConst { def, args, promoted: Some(promoted_id) }; let uneval =
mir::UnevaluatedConst { def, args, promoted: Some(next_promoted_index) };
ConstOperand { span, user_ty: None, const_: Const::Unevaluated(uneval, ty) } ConstOperand { span, user_ty: None, const_: Const::Unevaluated(uneval, ty) }
}; };
@ -1034,7 +1038,7 @@ fn promote_candidates<'tcx>(
required_consts: Vec::new(), required_consts: Vec::new(),
}; };
let mut promoted = promoter.promote_candidate(candidate, promotions.len()); let mut promoted = promoter.promote_candidate(candidate, promotions.next_index());
promoted.source.promoted = Some(promotions.next_index()); promoted.source.promoted = Some(promotions.next_index());
promotions.push(promoted); promotions.push(promoted);
} }

View file

@ -355,7 +355,7 @@ where
// exist at all (see the FIXME at the start of this method), we have to deal with // exist at all (see the FIXME at the start of this method), we have to deal with
// them for now. // them for now.
delegate.instantiate_canonical_var_with_infer(info, span, |idx| { delegate.instantiate_canonical_var_with_infer(info, span, |idx| {
ty::UniverseIndex::from(prev_universe.index() + idx.index()) prev_universe + idx.index()
}) })
} else if info.is_existential() { } else if info.is_existential() {
// As an optimization we sometimes avoid creating a new inference variable here. // As an optimization we sometimes avoid creating a new inference variable here.

View file

@ -578,8 +578,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
where where
F: FnMut(Variable) -> bool, F: FnMut(Variable) -> bool,
{ {
for var_idx in 0..self.ir.var_kinds.len() { for var in self.ir.var_kinds.indices() {
let var = Variable::from(var_idx);
if test(var) { if test(var) {
write!(wr, " {var:?}")?; write!(wr, " {var:?}")?;
} }
@ -609,8 +608,8 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
debug!( debug!(
"^^ liveness computation results for body {} (entry={:?})", "^^ liveness computation results for body {} (entry={:?})",
{ {
for ln_idx in 0..self.ir.lnks.len() { for ln_idx in self.ir.lnks.indices() {
debug!("{:?}", self.ln_str(LiveNode::from(ln_idx))); debug!("{:?}", self.ln_str(ln_idx));
} }
hir_id hir_id
}, },

View file

@ -1948,7 +1948,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
self.record_lifetime_res( self.record_lifetime_res(
anchor_id, anchor_id,
LifetimeRes::ElidedAnchor { start: id, end: NodeId::from_u32(id.as_u32() + 1) }, LifetimeRes::ElidedAnchor { start: id, end: id + 1 },
LifetimeElisionCandidate::Ignore, LifetimeElisionCandidate::Ignore,
); );
self.resolve_anonymous_lifetime(&lt, anchor_id, true); self.resolve_anonymous_lifetime(&lt, anchor_id, true);

View file

@ -643,7 +643,7 @@ fn replace_param_and_infer_args_with_placeholder<'tcx>(
) -> GenericArgsRef<'tcx> { ) -> GenericArgsRef<'tcx> {
struct ReplaceParamAndInferWithPlaceholder<'tcx> { struct ReplaceParamAndInferWithPlaceholder<'tcx> {
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
idx: u32, idx: ty::BoundVar,
} }
impl<'tcx> TypeFolder<TyCtxt<'tcx>> for ReplaceParamAndInferWithPlaceholder<'tcx> { impl<'tcx> TypeFolder<TyCtxt<'tcx>> for ReplaceParamAndInferWithPlaceholder<'tcx> {
@ -653,19 +653,13 @@ fn replace_param_and_infer_args_with_placeholder<'tcx>(
fn fold_ty(&mut self, t: Ty<'tcx>) -> Ty<'tcx> { fn fold_ty(&mut self, t: Ty<'tcx>) -> Ty<'tcx> {
if let ty::Infer(_) = t.kind() { if let ty::Infer(_) = t.kind() {
let idx = { let idx = self.idx;
let idx = self.idx; self.idx += 1;
self.idx += 1;
idx
};
Ty::new_placeholder( Ty::new_placeholder(
self.tcx, self.tcx,
ty::PlaceholderType { ty::PlaceholderType {
universe: ty::UniverseIndex::ROOT, universe: ty::UniverseIndex::ROOT,
bound: ty::BoundTy { bound: ty::BoundTy { var: idx, kind: ty::BoundTyKind::Anon },
var: ty::BoundVar::from_u32(idx),
kind: ty::BoundTyKind::Anon,
},
}, },
) )
} else { } else {
@ -675,16 +669,11 @@ fn replace_param_and_infer_args_with_placeholder<'tcx>(
fn fold_const(&mut self, c: ty::Const<'tcx>) -> ty::Const<'tcx> { fn fold_const(&mut self, c: ty::Const<'tcx>) -> ty::Const<'tcx> {
if let ty::ConstKind::Infer(_) = c.kind() { if let ty::ConstKind::Infer(_) = c.kind() {
let idx = self.idx;
self.idx += 1;
ty::Const::new_placeholder( ty::Const::new_placeholder(
self.tcx, self.tcx,
ty::PlaceholderConst { ty::PlaceholderConst { universe: ty::UniverseIndex::ROOT, bound: idx },
universe: ty::UniverseIndex::ROOT,
bound: ty::BoundVar::from_u32({
let idx = self.idx;
self.idx += 1;
idx
}),
},
) )
} else { } else {
c.super_fold_with(self) c.super_fold_with(self)
@ -692,7 +681,7 @@ fn replace_param_and_infer_args_with_placeholder<'tcx>(
} }
} }
args.fold_with(&mut ReplaceParamAndInferWithPlaceholder { tcx, idx: 0 }) args.fold_with(&mut ReplaceParamAndInferWithPlaceholder { tcx, idx: ty::BoundVar::ZERO })
} }
/// Normalizes the predicates and checks whether they hold in an empty environment. If this /// Normalizes the predicates and checks whether they hold in an empty environment. If this