Auto merge of #99814 - aliemjay:patch-2, r=jackh726
fix universe map in ifcx.instantiate_canonical_* Previously, `infcx.instantiate_canonical_*` maps the root universe in `canonical` into `ty::UniverseIndex::Root`, I think because it assumes it works with a fresh `infcx` but this is not true for the use cases in mir typeck. Now the root universe is mapped into `infcx.universe()`. I catched this accidentally while reviewing the code. I'm not sure if this is the right fix or if it is really a bug!
This commit is contained in:
commit
90711a86e5
1 changed files with 6 additions and 3 deletions
|
@ -41,7 +41,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
||||||
/// inference variables and applies it to the canonical value.
|
/// inference variables and applies it to the canonical value.
|
||||||
/// Returns both the instantiated result *and* the substitution S.
|
/// Returns both the instantiated result *and* the substitution S.
|
||||||
///
|
///
|
||||||
/// This is only meant to be invoked as part of constructing an
|
/// This can be invoked as part of constructing an
|
||||||
/// inference context at the start of a query (see
|
/// inference context at the start of a query (see
|
||||||
/// `InferCtxtBuilder::build_with_canonical`). It basically
|
/// `InferCtxtBuilder::build_with_canonical`). It basically
|
||||||
/// brings the canonical value "into scope" within your new infcx.
|
/// brings the canonical value "into scope" within your new infcx.
|
||||||
|
@ -63,8 +63,11 @@ impl<'tcx> InferCtxt<'tcx> {
|
||||||
// in them, so this code has no effect, but it is looking
|
// in them, so this code has no effect, but it is looking
|
||||||
// forward to the day when we *do* want to carry universes
|
// forward to the day when we *do* want to carry universes
|
||||||
// through into queries.
|
// through into queries.
|
||||||
let universes: IndexVec<ty::UniverseIndex, _> = std::iter::once(ty::UniverseIndex::ROOT)
|
//
|
||||||
.chain((0..canonical.max_universe.as_u32()).map(|_| self.create_next_universe()))
|
// Instantiate the root-universe content into the current universe,
|
||||||
|
// and create fresh universes for the higher universes.
|
||||||
|
let universes: IndexVec<ty::UniverseIndex, _> = std::iter::once(self.universe())
|
||||||
|
.chain((1..=canonical.max_universe.as_u32()).map(|_| self.create_next_universe()))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let canonical_inference_vars =
|
let canonical_inference_vars =
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue