Skip to content

Commit f494036

Browse files
Make ProofTreeBuilder actually generic over interner
1 parent 50a5da1 commit f494036

File tree

7 files changed

+102
-83
lines changed

7 files changed

+102
-83
lines changed

compiler/rustc_middle/src/ty/context.rs

+7
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,13 @@ impl<'tcx> Interner for TyCtxt<'tcx> {
218218
self.check_and_mk_args(def_id, args)
219219
}
220220

221+
fn intern_canonical_goal_evaluation_step(
222+
self,
223+
step: solve::inspect::CanonicalGoalEvaluationStep<TyCtxt<'tcx>>,
224+
) -> &'tcx solve::inspect::CanonicalGoalEvaluationStep<TyCtxt<'tcx>> {
225+
self.arena.alloc(step)
226+
}
227+
221228
fn parent(self, def_id: Self::DefId) -> Self::DefId {
222229
self.parent(def_id)
223230
}

compiler/rustc_trait_selection/src/solve/eval_ctxt/canonical.rs

+17-11
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use crate::solve::{
1616
use rustc_data_structures::fx::FxHashSet;
1717
use rustc_index::IndexVec;
1818
use rustc_infer::infer::canonical::query_response::make_query_region_constraints;
19-
use rustc_infer::infer::canonical::CanonicalVarValues;
2019
use rustc_infer::infer::canonical::{CanonicalExt, QueryRegionConstraints};
2120
use rustc_infer::infer::RegionVariableOrigin;
2221
use rustc_infer::infer::{InferCtxt, InferOk};
@@ -32,22 +31,24 @@ use rustc_middle::ty::{self, BoundVar, GenericArgKind, Ty, TyCtxt, TypeFoldable}
3231
use rustc_next_trait_solver::canonicalizer::{CanonicalizeMode, Canonicalizer};
3332
use rustc_next_trait_solver::resolve::EagerResolver;
3433
use rustc_span::{Span, DUMMY_SP};
34+
use rustc_type_ir::CanonicalVarValues;
35+
use rustc_type_ir::{InferCtxtLike, Interner};
3536
use std::assert_matches::assert_matches;
3637
use std::iter;
3738
use std::ops::Deref;
3839

3940
trait ResponseT<'tcx> {
40-
fn var_values(&self) -> CanonicalVarValues<'tcx>;
41+
fn var_values(&self) -> CanonicalVarValues<TyCtxt<'tcx>>;
4142
}
4243

4344
impl<'tcx> ResponseT<'tcx> for Response<TyCtxt<'tcx>> {
44-
fn var_values(&self) -> CanonicalVarValues<'tcx> {
45+
fn var_values(&self) -> CanonicalVarValues<TyCtxt<'tcx>> {
4546
self.var_values
4647
}
4748
}
4849

4950
impl<'tcx, T> ResponseT<'tcx> for inspect::State<TyCtxt<'tcx>, T> {
50-
fn var_values(&self) -> CanonicalVarValues<'tcx> {
51+
fn var_values(&self) -> CanonicalVarValues<TyCtxt<'tcx>> {
5152
self.var_values
5253
}
5354
}
@@ -260,7 +261,7 @@ impl<'tcx> EvalCtxt<'_, InferCtxt<'tcx>> {
260261
infcx: &InferCtxt<'tcx>,
261262
original_values: &[ty::GenericArg<'tcx>],
262263
response: &Canonical<'tcx, T>,
263-
) -> CanonicalVarValues<'tcx> {
264+
) -> CanonicalVarValues<TyCtxt<'tcx>> {
264265
// FIXME: Longterm canonical queries should deal with all placeholders
265266
// created inside of the query directly instead of returning them to the
266267
// caller.
@@ -354,7 +355,7 @@ impl<'tcx> EvalCtxt<'_, InferCtxt<'tcx>> {
354355
infcx: &InferCtxt<'tcx>,
355356
param_env: ty::ParamEnv<'tcx>,
356357
original_values: &[ty::GenericArg<'tcx>],
357-
var_values: CanonicalVarValues<'tcx>,
358+
var_values: CanonicalVarValues<TyCtxt<'tcx>>,
358359
) {
359360
assert_eq!(original_values.len(), var_values.len());
360361

@@ -393,13 +394,18 @@ impl<'tcx> EvalCtxt<'_, InferCtxt<'tcx>> {
393394
/// evaluating a goal. The `var_values` not only include the bound variables
394395
/// of the query input, but also contain all unconstrained inference vars
395396
/// created while evaluating this goal.
396-
pub(in crate::solve) fn make_canonical_state<'tcx, T: TypeFoldable<TyCtxt<'tcx>>>(
397-
infcx: &InferCtxt<'tcx>,
398-
var_values: &[ty::GenericArg<'tcx>],
397+
pub(in crate::solve) fn make_canonical_state<Infcx, T, I>(
398+
infcx: &Infcx,
399+
var_values: &[I::GenericArg],
399400
max_input_universe: ty::UniverseIndex,
400401
data: T,
401-
) -> inspect::CanonicalState<TyCtxt<'tcx>, T> {
402-
let var_values = CanonicalVarValues { var_values: infcx.tcx.mk_args(var_values) };
402+
) -> inspect::CanonicalState<I, T>
403+
where
404+
Infcx: InferCtxtLike<Interner = I>,
405+
I: Interner,
406+
T: TypeFoldable<I>,
407+
{
408+
let var_values = CanonicalVarValues { var_values: infcx.interner().mk_args(var_values) };
403409
let state = inspect::State { var_values, data };
404410
let state = state.fold_with(&mut EagerResolver::new(infcx));
405411
Canonicalizer::canonicalize(

compiler/rustc_trait_selection/src/solve/eval_ctxt/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ pub struct EvalCtxt<
9898
// evaluation code.
9999
tainted: Result<(), NoSolution>,
100100

101-
pub(super) inspect: ProofTreeBuilder<I>,
101+
pub(super) inspect: ProofTreeBuilder<Infcx>,
102102
}
103103

104104
#[derive(derivative::Derivative)]
@@ -218,7 +218,7 @@ impl<'a, 'tcx> EvalCtxt<'a, InferCtxt<'tcx>> {
218218
tcx: TyCtxt<'tcx>,
219219
search_graph: &'a mut search_graph::SearchGraph<TyCtxt<'tcx>>,
220220
canonical_input: CanonicalInput<'tcx>,
221-
canonical_goal_evaluation: &mut ProofTreeBuilder<TyCtxt<'tcx>>,
221+
canonical_goal_evaluation: &mut ProofTreeBuilder<InferCtxt<'tcx>>,
222222
f: impl FnOnce(&mut EvalCtxt<'_, InferCtxt<'tcx>>, Goal<'tcx, ty::Predicate<'tcx>>) -> R,
223223
) -> R {
224224
let intercrate = match search_graph.solver_mode() {
@@ -280,7 +280,7 @@ impl<'a, 'tcx> EvalCtxt<'a, InferCtxt<'tcx>> {
280280
tcx: TyCtxt<'tcx>,
281281
search_graph: &'a mut search_graph::SearchGraph<TyCtxt<'tcx>>,
282282
canonical_input: CanonicalInput<'tcx>,
283-
goal_evaluation: &mut ProofTreeBuilder<TyCtxt<'tcx>>,
283+
goal_evaluation: &mut ProofTreeBuilder<InferCtxt<'tcx>>,
284284
) -> QueryResult<'tcx> {
285285
let mut canonical_goal_evaluation =
286286
goal_evaluation.new_canonical_goal_evaluation(canonical_input);
@@ -1114,7 +1114,7 @@ struct ReplaceAliasWithInfer<'me, 'a, 'tcx> {
11141114

11151115
impl<'tcx> TypeFolder<TyCtxt<'tcx>> for ReplaceAliasWithInfer<'_, '_, 'tcx> {
11161116
fn interner(&self) -> TyCtxt<'tcx> {
1117-
self.ecx.tcx()
1117+
self.ecx.interner()
11181118
}
11191119

11201120
fn fold_ty(&mut self, ty: Ty<'tcx>) -> Ty<'tcx> {

0 commit comments

Comments
 (0)