Skip to content

Commit d973da0

Browse files
committed
yeet CanonicalVarInfo
1 parent 52bf0cf commit d973da0

File tree

17 files changed

+174
-224
lines changed

17 files changed

+174
-224
lines changed

compiler/rustc_infer/src/infer/canonical/canonicalizer.rs

Lines changed: 46 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ use tracing::debug;
1717

1818
use crate::infer::InferCtxt;
1919
use crate::infer::canonical::{
20-
Canonical, CanonicalQueryInput, CanonicalTyVarKind, CanonicalVarInfo, CanonicalVarKind,
21-
OriginalQueryValues,
20+
Canonical, CanonicalQueryInput, CanonicalTyVarKind, CanonicalVarKind, OriginalQueryValues,
2221
};
2322

2423
impl<'tcx> InferCtxt<'tcx> {
@@ -174,10 +173,8 @@ impl CanonicalizeMode for CanonicalizeQueryResponse {
174173
match r.kind() {
175174
ty::ReLateParam(_) | ty::ReErased | ty::ReStatic | ty::ReEarlyParam(..) => r,
176175

177-
ty::RePlaceholder(placeholder) => canonicalizer.canonical_var_for_region(
178-
CanonicalVarInfo { kind: CanonicalVarKind::PlaceholderRegion(placeholder) },
179-
r,
180-
),
176+
ty::RePlaceholder(placeholder) => canonicalizer
177+
.canonical_var_for_region(CanonicalVarKind::PlaceholderRegion(placeholder), r),
181178

182179
ty::ReVar(vid) => {
183180
let universe = infcx
@@ -186,10 +183,7 @@ impl CanonicalizeMode for CanonicalizeQueryResponse {
186183
.unwrap_region_constraints()
187184
.probe_value(vid)
188185
.unwrap_err();
189-
canonicalizer.canonical_var_for_region(
190-
CanonicalVarInfo { kind: CanonicalVarKind::Region(universe) },
191-
r,
192-
)
186+
canonicalizer.canonical_var_for_region(CanonicalVarKind::Region(universe), r)
193187
}
194188

195189
_ => {
@@ -294,7 +288,7 @@ struct Canonicalizer<'cx, 'tcx> {
294288
/// Set to `None` to disable the resolution of inference variables.
295289
infcx: Option<&'cx InferCtxt<'tcx>>,
296290
tcx: TyCtxt<'tcx>,
297-
variables: SmallVec<[CanonicalVarInfo<'tcx>; 8]>,
291+
variables: SmallVec<[CanonicalVarKind<'tcx>; 8]>,
298292
query_state: &'cx mut OriginalQueryValues<'tcx>,
299293
// Note that indices is only used once `var_values` is big enough to be
300294
// heap-allocated.
@@ -368,9 +362,7 @@ impl<'cx, 'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'cx, 'tcx> {
368362
ui = ty::UniverseIndex::ROOT;
369363
}
370364
self.canonicalize_ty_var(
371-
CanonicalVarInfo {
372-
kind: CanonicalVarKind::Ty(CanonicalTyVarKind::General(ui)),
373-
},
365+
CanonicalVarKind::Ty(CanonicalTyVarKind::General(ui)),
374366
t,
375367
)
376368
}
@@ -382,21 +374,15 @@ impl<'cx, 'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'cx, 'tcx> {
382374
if nt != t {
383375
return self.fold_ty(nt);
384376
} else {
385-
self.canonicalize_ty_var(
386-
CanonicalVarInfo { kind: CanonicalVarKind::Ty(CanonicalTyVarKind::Int) },
387-
t,
388-
)
377+
self.canonicalize_ty_var(CanonicalVarKind::Ty(CanonicalTyVarKind::Int), t)
389378
}
390379
}
391380
ty::Infer(ty::FloatVar(vid)) => {
392381
let nt = self.infcx.unwrap().opportunistic_resolve_float_var(vid);
393382
if nt != t {
394383
return self.fold_ty(nt);
395384
} else {
396-
self.canonicalize_ty_var(
397-
CanonicalVarInfo { kind: CanonicalVarKind::Ty(CanonicalTyVarKind::Float) },
398-
t,
399-
)
385+
self.canonicalize_ty_var(CanonicalVarKind::Ty(CanonicalTyVarKind::Float), t)
400386
}
401387
}
402388

@@ -408,10 +394,7 @@ impl<'cx, 'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'cx, 'tcx> {
408394
if !self.canonicalize_mode.preserve_universes() {
409395
placeholder.universe = ty::UniverseIndex::ROOT;
410396
}
411-
self.canonicalize_ty_var(
412-
CanonicalVarInfo { kind: CanonicalVarKind::PlaceholderTy(placeholder) },
413-
t,
414-
)
397+
self.canonicalize_ty_var(CanonicalVarKind::PlaceholderTy(placeholder), t)
415398
}
416399

417400
ty::Bound(debruijn, _) => {
@@ -483,10 +466,7 @@ impl<'cx, 'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'cx, 'tcx> {
483466
// FIXME: perf problem described in #55921.
484467
ui = ty::UniverseIndex::ROOT;
485468
}
486-
return self.canonicalize_const_var(
487-
CanonicalVarInfo { kind: CanonicalVarKind::Const(ui) },
488-
ct,
489-
);
469+
return self.canonicalize_const_var(CanonicalVarKind::Const(ui), ct);
490470
}
491471
}
492472
}
@@ -501,10 +481,8 @@ impl<'cx, 'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'cx, 'tcx> {
501481
}
502482
}
503483
ty::ConstKind::Placeholder(placeholder) => {
504-
return self.canonicalize_const_var(
505-
CanonicalVarInfo { kind: CanonicalVarKind::PlaceholderConst(placeholder) },
506-
ct,
507-
);
484+
return self
485+
.canonicalize_const_var(CanonicalVarKind::PlaceholderConst(placeholder), ct);
508486
}
509487
_ => {}
510488
}
@@ -595,7 +573,7 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
595573
debug_assert!(!out_value.has_infer() && !out_value.has_placeholders());
596574

597575
let canonical_variables =
598-
tcx.mk_canonical_var_infos(&canonicalizer.universe_canonicalized_variables());
576+
tcx.mk_canonical_var_kinds(&canonicalizer.universe_canonicalized_variables());
599577

600578
let max_universe = canonical_variables
601579
.iter()
@@ -610,7 +588,7 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
610588
/// or returns an existing variable if `kind` has already been
611589
/// seen. `kind` is expected to be an unbound variable (or
612590
/// potentially a free region).
613-
fn canonical_var(&mut self, info: CanonicalVarInfo<'tcx>, kind: GenericArg<'tcx>) -> BoundVar {
591+
fn canonical_var(&mut self, info: CanonicalVarKind<'tcx>, kind: GenericArg<'tcx>) -> BoundVar {
614592
let Canonicalizer { variables, query_state, indices, .. } = self;
615593

616594
let var_values = &mut query_state.var_values;
@@ -673,7 +651,7 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
673651
/// Replaces the universe indexes used in `var_values` with their index in
674652
/// `query_state.universe_map`. This minimizes the maximum universe used in
675653
/// the canonicalized value.
676-
fn universe_canonicalized_variables(self) -> SmallVec<[CanonicalVarInfo<'tcx>; 8]> {
654+
fn universe_canonicalized_variables(self) -> SmallVec<[CanonicalVarKind<'tcx>; 8]> {
677655
if self.query_state.universe_map.len() == 1 {
678656
return self.variables;
679657
}
@@ -688,37 +666,33 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
688666

689667
self.variables
690668
.iter()
691-
.map(|v| CanonicalVarInfo {
692-
kind: match v.kind {
693-
CanonicalVarKind::Ty(CanonicalTyVarKind::Int | CanonicalTyVarKind::Float) => {
694-
return *v;
695-
}
696-
CanonicalVarKind::Ty(CanonicalTyVarKind::General(u)) => {
697-
CanonicalVarKind::Ty(CanonicalTyVarKind::General(reverse_universe_map[&u]))
698-
}
699-
CanonicalVarKind::Region(u) => {
700-
CanonicalVarKind::Region(reverse_universe_map[&u])
701-
}
702-
CanonicalVarKind::Const(u) => CanonicalVarKind::Const(reverse_universe_map[&u]),
703-
CanonicalVarKind::PlaceholderTy(placeholder) => {
704-
CanonicalVarKind::PlaceholderTy(ty::Placeholder {
705-
universe: reverse_universe_map[&placeholder.universe],
706-
..placeholder
707-
})
708-
}
709-
CanonicalVarKind::PlaceholderRegion(placeholder) => {
710-
CanonicalVarKind::PlaceholderRegion(ty::Placeholder {
711-
universe: reverse_universe_map[&placeholder.universe],
712-
..placeholder
713-
})
714-
}
715-
CanonicalVarKind::PlaceholderConst(placeholder) => {
716-
CanonicalVarKind::PlaceholderConst(ty::Placeholder {
717-
universe: reverse_universe_map[&placeholder.universe],
718-
..placeholder
719-
})
720-
}
721-
},
669+
.map(|&kind| match kind {
670+
CanonicalVarKind::Ty(CanonicalTyVarKind::Int | CanonicalTyVarKind::Float) => {
671+
return kind;
672+
}
673+
CanonicalVarKind::Ty(CanonicalTyVarKind::General(u)) => {
674+
CanonicalVarKind::Ty(CanonicalTyVarKind::General(reverse_universe_map[&u]))
675+
}
676+
CanonicalVarKind::Region(u) => CanonicalVarKind::Region(reverse_universe_map[&u]),
677+
CanonicalVarKind::Const(u) => CanonicalVarKind::Const(reverse_universe_map[&u]),
678+
CanonicalVarKind::PlaceholderTy(placeholder) => {
679+
CanonicalVarKind::PlaceholderTy(ty::Placeholder {
680+
universe: reverse_universe_map[&placeholder.universe],
681+
..placeholder
682+
})
683+
}
684+
CanonicalVarKind::PlaceholderRegion(placeholder) => {
685+
CanonicalVarKind::PlaceholderRegion(ty::Placeholder {
686+
universe: reverse_universe_map[&placeholder.universe],
687+
..placeholder
688+
})
689+
}
690+
CanonicalVarKind::PlaceholderConst(placeholder) => {
691+
CanonicalVarKind::PlaceholderConst(ty::Placeholder {
692+
universe: reverse_universe_map[&placeholder.universe],
693+
..placeholder
694+
})
695+
}
722696
})
723697
.collect()
724698
}
@@ -740,17 +714,14 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
740714
&mut self,
741715
r: ty::Region<'tcx>,
742716
) -> ty::Region<'tcx> {
743-
self.canonical_var_for_region(
744-
CanonicalVarInfo { kind: CanonicalVarKind::Region(ty::UniverseIndex::ROOT) },
745-
r,
746-
)
717+
self.canonical_var_for_region(CanonicalVarKind::Region(ty::UniverseIndex::ROOT), r)
747718
}
748719

749720
/// Creates a canonical variable (with the given `info`)
750721
/// representing the region `r`; return a region referencing it.
751722
fn canonical_var_for_region(
752723
&mut self,
753-
info: CanonicalVarInfo<'tcx>,
724+
info: CanonicalVarKind<'tcx>,
754725
r: ty::Region<'tcx>,
755726
) -> ty::Region<'tcx> {
756727
let var = self.canonical_var(info, r.into());
@@ -762,7 +733,7 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
762733
/// if `ty_var` is bound to anything; if so, canonicalize
763734
/// *that*. Otherwise, create a new canonical variable for
764735
/// `ty_var`.
765-
fn canonicalize_ty_var(&mut self, info: CanonicalVarInfo<'tcx>, ty_var: Ty<'tcx>) -> Ty<'tcx> {
736+
fn canonicalize_ty_var(&mut self, info: CanonicalVarKind<'tcx>, ty_var: Ty<'tcx>) -> Ty<'tcx> {
766737
debug_assert!(!self.infcx.is_some_and(|infcx| ty_var != infcx.shallow_resolve(ty_var)));
767738
let var = self.canonical_var(info, ty_var.into());
768739
Ty::new_bound(self.tcx, self.binder_index, var.into())
@@ -774,7 +745,7 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
774745
/// `const_var`.
775746
fn canonicalize_const_var(
776747
&mut self,
777-
info: CanonicalVarInfo<'tcx>,
748+
info: CanonicalVarKind<'tcx>,
778749
const_var: ty::Const<'tcx>,
779750
) -> ty::Const<'tcx> {
780751
debug_assert!(

compiler/rustc_infer/src/infer/canonical/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ impl<'tcx> InferCtxt<'tcx> {
8181
fn instantiate_canonical_vars(
8282
&self,
8383
span: Span,
84-
variables: &List<CanonicalVarInfo<'tcx>>,
84+
variables: &List<CanonicalVarKind<'tcx>>,
8585
universe_map: impl Fn(ty::UniverseIndex) -> ty::UniverseIndex,
8686
) -> CanonicalVarValues<'tcx> {
8787
CanonicalVarValues {
@@ -104,10 +104,10 @@ impl<'tcx> InferCtxt<'tcx> {
104104
pub fn instantiate_canonical_var(
105105
&self,
106106
span: Span,
107-
cv_info: CanonicalVarInfo<'tcx>,
107+
kind: CanonicalVarKind<'tcx>,
108108
universe_map: impl Fn(ty::UniverseIndex) -> ty::UniverseIndex,
109109
) -> GenericArg<'tcx> {
110-
match cv_info.kind {
110+
match kind {
111111
CanonicalVarKind::Ty(ty_kind) => {
112112
let ty = match ty_kind {
113113
CanonicalTyVarKind::General(ui) => {

compiler/rustc_middle/src/infer/canonical.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ use rustc_data_structures::fx::FxHashMap;
2727
use rustc_data_structures::sync::Lock;
2828
use rustc_macros::{HashStable, TypeFoldable, TypeVisitable};
2929
pub use rustc_type_ir as ir;
30-
pub use rustc_type_ir::{CanonicalTyVarKind, CanonicalVarKind};
30+
pub use rustc_type_ir::CanonicalTyVarKind;
3131
use smallvec::SmallVec;
3232

3333
use crate::mir::ConstraintCategory;
3434
use crate::ty::{self, GenericArg, List, Ty, TyCtxt, TypeFlags, TypeVisitableExt};
3535

3636
pub type CanonicalQueryInput<'tcx, V> = ir::CanonicalQueryInput<TyCtxt<'tcx>, V>;
3737
pub type Canonical<'tcx, V> = ir::Canonical<TyCtxt<'tcx>, V>;
38-
pub type CanonicalVarInfo<'tcx> = ir::CanonicalVarInfo<TyCtxt<'tcx>>;
38+
pub type CanonicalVarKind<'tcx> = ir::CanonicalVarKind<TyCtxt<'tcx>>;
3939
pub type CanonicalVarValues<'tcx> = ir::CanonicalVarValues<TyCtxt<'tcx>>;
40-
pub type CanonicalVarInfos<'tcx> = &'tcx List<CanonicalVarInfo<'tcx>>;
40+
pub type CanonicalVarKinds<'tcx> = &'tcx List<CanonicalVarKind<'tcx>>;
4141

4242
/// When we canonicalize a value to form a query, we wind up replacing
4343
/// various parts of it with canonical variables. This struct stores

compiler/rustc_middle/src/ty/codec.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use rustc_span::source_map::Spanned;
1818
use rustc_span::{Span, SpanDecoder, SpanEncoder};
1919

2020
use crate::arena::ArenaAllocatable;
21-
use crate::infer::canonical::{CanonicalVarInfo, CanonicalVarInfos};
21+
use crate::infer::canonical::{CanonicalVarKind, CanonicalVarKinds};
2222
use crate::mir::interpret::{AllocId, ConstAllocation, CtfeProvenance};
2323
use crate::mir::mono::MonoItem;
2424
use crate::mir::{self};
@@ -310,11 +310,11 @@ impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for ty::Region<'tcx> {
310310
}
311311
}
312312

313-
impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for CanonicalVarInfos<'tcx> {
313+
impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for CanonicalVarKinds<'tcx> {
314314
fn decode(decoder: &mut D) -> Self {
315315
let len = decoder.read_usize();
316316
decoder.interner().mk_canonical_var_infos_from_iter(
317-
(0..len).map::<CanonicalVarInfo<'tcx>, _>(|_| Decodable::decode(decoder)),
317+
(0..len).map::<CanonicalVarKind<'tcx>, _>(|_| Decodable::decode(decoder)),
318318
)
319319
}
320320
}

compiler/rustc_middle/src/ty/context.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ use tracing::{debug, instrument};
6060

6161
use crate::arena::Arena;
6262
use crate::dep_graph::{DepGraph, DepKindStruct};
63-
use crate::infer::canonical::{CanonicalParamEnvCache, CanonicalVarInfo, CanonicalVarInfos};
63+
use crate::infer::canonical::{CanonicalParamEnvCache, CanonicalVarKind, CanonicalVarKinds};
6464
use crate::lint::lint_level;
6565
use crate::metadata::ModChild;
6666
use crate::middle::codegen_fn_attrs::{CodegenFnAttrs, TargetFeature};
@@ -107,9 +107,12 @@ impl<'tcx> Interner for TyCtxt<'tcx> {
107107
self.mk_predefined_opaques_in_body(data)
108108
}
109109
type LocalDefIds = &'tcx ty::List<LocalDefId>;
110-
type CanonicalVars = CanonicalVarInfos<'tcx>;
111-
fn mk_canonical_var_infos(self, infos: &[ty::CanonicalVarInfo<Self>]) -> Self::CanonicalVars {
112-
self.mk_canonical_var_infos(infos)
110+
type CanonicalVarKinds = CanonicalVarKinds<'tcx>;
111+
fn mk_canonical_var_kinds(
112+
self,
113+
kinds: &[ty::CanonicalVarKind<Self>],
114+
) -> Self::CanonicalVarKinds {
115+
self.mk_canonical_var_kinds(kinds)
113116
}
114117

115118
type ExternalConstraints = ExternalConstraints<'tcx>;
@@ -833,7 +836,7 @@ pub struct CtxtInterners<'tcx> {
833836
const_lists: InternedSet<'tcx, List<ty::Const<'tcx>>>,
834837
args: InternedSet<'tcx, GenericArgs<'tcx>>,
835838
type_lists: InternedSet<'tcx, List<Ty<'tcx>>>,
836-
canonical_var_infos: InternedSet<'tcx, List<CanonicalVarInfo<'tcx>>>,
839+
canonical_var_kinds: InternedSet<'tcx, List<CanonicalVarKind<'tcx>>>,
837840
region: InternedSet<'tcx, RegionKind<'tcx>>,
838841
poly_existential_predicates: InternedSet<'tcx, List<PolyExistentialPredicate<'tcx>>>,
839842
predicate: InternedSet<'tcx, WithCachedTypeInfo<ty::Binder<'tcx, PredicateKind<'tcx>>>>,
@@ -872,7 +875,7 @@ impl<'tcx> CtxtInterners<'tcx> {
872875
type_lists: InternedSet::with_capacity(N * 4),
873876
region: InternedSet::with_capacity(N * 4),
874877
poly_existential_predicates: InternedSet::with_capacity(N / 4),
875-
canonical_var_infos: InternedSet::with_capacity(N / 2),
878+
canonical_var_kinds: InternedSet::with_capacity(N / 2),
876879
predicate: InternedSet::with_capacity(N),
877880
clauses: InternedSet::with_capacity(N),
878881
projs: InternedSet::with_capacity(N * 4),
@@ -2675,7 +2678,7 @@ slice_interners!(
26752678
const_lists: pub mk_const_list(Const<'tcx>),
26762679
args: pub mk_args(GenericArg<'tcx>),
26772680
type_lists: pub mk_type_list(Ty<'tcx>),
2678-
canonical_var_infos: pub mk_canonical_var_infos(CanonicalVarInfo<'tcx>),
2681+
canonical_var_kinds: pub mk_canonical_var_kinds(CanonicalVarKind<'tcx>),
26792682
poly_existential_predicates: intern_poly_existential_predicates(PolyExistentialPredicate<'tcx>),
26802683
projs: pub mk_projs(ProjectionKind),
26812684
place_elems: pub mk_place_elems(PlaceElem<'tcx>),
@@ -3055,9 +3058,9 @@ impl<'tcx> TyCtxt<'tcx> {
30553058
pub fn mk_canonical_var_infos_from_iter<I, T>(self, iter: I) -> T::Output
30563059
where
30573060
I: Iterator<Item = T>,
3058-
T: CollectAndApply<CanonicalVarInfo<'tcx>, &'tcx List<CanonicalVarInfo<'tcx>>>,
3061+
T: CollectAndApply<CanonicalVarKind<'tcx>, &'tcx List<CanonicalVarKind<'tcx>>>,
30593062
{
3060-
T::collect_and_apply(iter, |xs| self.mk_canonical_var_infos(xs))
3063+
T::collect_and_apply(iter, |xs| self.mk_canonical_var_kinds(xs))
30613064
}
30623065

30633066
pub fn mk_place_elems_from_iter<I, T>(self, iter: I) -> T::Output

0 commit comments

Comments
 (0)