Skip to content

Commit 012910d

Browse files
Canonicalize const variables correctly
1 parent 72e74d7 commit 012910d

File tree

4 files changed

+11
-14
lines changed

4 files changed

+11
-14
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ impl<'cx, 'tcx> TypeFolder<'tcx> for Canonicalizer<'cx, 'tcx> {
425425
// FIXME: perf problem described in #55921.
426426
ui = ty::UniverseIndex::ROOT;
427427
return self.canonicalize_const_var(
428-
CanonicalVarInfo { kind: CanonicalVarKind::Const(ui) },
428+
CanonicalVarInfo { kind: CanonicalVarKind::Const(ui, ct.ty) },
429429
ct,
430430
);
431431
}

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,9 @@ impl<'cx, 'tcx> InferCtxt<'cx, 'tcx> {
137137
self.tcx.mk_region(ty::RePlaceholder(placeholder_mapped)).into()
138138
}
139139

140-
CanonicalVarKind::Const(ui) => self
140+
CanonicalVarKind::Const(ui, ty) => self
141141
.next_const_var_in_universe(
142-
self.next_ty_var_in_universe(
143-
TypeVariableOrigin { kind: TypeVariableOriginKind::MiscVariable, span },
144-
universe_map(ui),
145-
),
142+
ty,
146143
ConstVariableOrigin { kind: ConstVariableOriginKind::MiscVariable, span },
147144
universe_map(ui),
148145
)

compiler/rustc_middle/src/infer/canonical.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
2424
use crate::infer::MemberConstraint;
2525
use crate::ty::subst::GenericArg;
26-
use crate::ty::{self, BoundVar, List, Region, TyCtxt};
26+
use crate::ty::{self, BoundVar, List, Region, Ty, TyCtxt};
2727
use rustc_index::vec::IndexVec;
2828
use rustc_macros::HashStable;
2929
use smallvec::SmallVec;
@@ -104,7 +104,7 @@ impl<'tcx> CanonicalVarInfo<'tcx> {
104104
CanonicalVarKind::PlaceholderTy(_) => false,
105105
CanonicalVarKind::Region(_) => true,
106106
CanonicalVarKind::PlaceholderRegion(..) => false,
107-
CanonicalVarKind::Const(_) => true,
107+
CanonicalVarKind::Const(..) => true,
108108
CanonicalVarKind::PlaceholderConst(_) => false,
109109
}
110110
}
@@ -130,7 +130,7 @@ pub enum CanonicalVarKind<'tcx> {
130130
PlaceholderRegion(ty::PlaceholderRegion),
131131

132132
/// Some kind of const inference variable.
133-
Const(ty::UniverseIndex),
133+
Const(ty::UniverseIndex, Ty<'tcx>),
134134

135135
/// A "placeholder" that represents "any const".
136136
PlaceholderConst(ty::PlaceholderConst<'tcx>),
@@ -147,7 +147,7 @@ impl<'tcx> CanonicalVarKind<'tcx> {
147147
CanonicalVarKind::PlaceholderTy(placeholder) => placeholder.universe,
148148
CanonicalVarKind::Region(ui) => ui,
149149
CanonicalVarKind::PlaceholderRegion(placeholder) => placeholder.universe,
150-
CanonicalVarKind::Const(ui) => ui,
150+
CanonicalVarKind::Const(ui, _) => ui,
151151
CanonicalVarKind::PlaceholderConst(placeholder) => placeholder.universe,
152152
}
153153
}

compiler/rustc_traits/src/chalk/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ crate fn evaluate_goal<'tcx>(
8585
chalk_ir::VariableKind::Lifetime,
8686
chalk_ir::UniverseIndex { counter: ui.index() },
8787
),
88-
CanonicalVarKind::Const(_ui) => unimplemented!(),
88+
CanonicalVarKind::Const(_ui, _ty) => unimplemented!(),
8989
CanonicalVarKind::PlaceholderConst(_pc) => unimplemented!(),
9090
}),
9191
),
@@ -127,9 +127,9 @@ crate fn evaluate_goal<'tcx>(
127127
chalk_ir::VariableKind::Lifetime => CanonicalVarKind::Region(
128128
ty::UniverseIndex::from_usize(var.skip_kind().counter),
129129
),
130-
chalk_ir::VariableKind::Const(_) => CanonicalVarKind::Const(
131-
ty::UniverseIndex::from_usize(var.skip_kind().counter),
132-
),
130+
// FIXME(compiler-errors): We don't currently have a way of turning
131+
// a Chalk ty back into a rustc ty, right?
132+
chalk_ir::VariableKind::Const(_) => todo!(),
133133
};
134134
CanonicalVarInfo { kind }
135135
})

0 commit comments

Comments
 (0)