Rename ToPredicate for Upcast
This commit is contained in:
parent
97bf25c8cf
commit
11ec3eca74
44 changed files with 214 additions and 220 deletions
|
@ -10,7 +10,7 @@ use rustc_middle::infer::canonical::{Canonical, CanonicalQueryResponse, QueryRes
|
|||
use rustc_middle::traits::query::NoSolution;
|
||||
use rustc_middle::traits::ObligationCause;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeFoldable, TypeVisitableExt};
|
||||
use rustc_middle::ty::{GenericArg, ToPredicate};
|
||||
use rustc_middle::ty::{GenericArg, Upcast};
|
||||
use rustc_span::DUMMY_SP;
|
||||
|
||||
use std::fmt::Debug;
|
||||
|
@ -63,7 +63,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
cause: traits::ObligationCause::dummy(),
|
||||
param_env,
|
||||
recursion_depth: 0,
|
||||
predicate: ty::Binder::dummy(trait_ref).to_predicate(self.tcx),
|
||||
predicate: ty::Binder::dummy(trait_ref).upcast(self.tcx),
|
||||
};
|
||||
self.evaluate_obligation(&obligation).unwrap_or(traits::EvaluationResult::EvaluatedToErr)
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ use rustc_middle::traits::BuiltinImplSource;
|
|||
use rustc_middle::ty::fast_reject::{SimplifiedType, TreatParams};
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
use rustc_middle::ty::{fast_reject, TypeFoldable};
|
||||
use rustc_middle::ty::{ToPredicate, TypeVisitableExt};
|
||||
use rustc_middle::ty::{TypeVisitableExt, Upcast};
|
||||
use rustc_span::{ErrorGuaranteed, DUMMY_SP};
|
||||
use std::fmt::Debug;
|
||||
|
||||
|
@ -744,7 +744,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
|||
ecx,
|
||||
CandidateSource::BuiltinImpl(BuiltinImplSource::Object { vtable_base }),
|
||||
goal,
|
||||
assumption.to_predicate(tcx),
|
||||
assumption.upcast(tcx),
|
||||
));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -7,9 +7,7 @@ use rustc_infer::traits::query::NoSolution;
|
|||
use rustc_macros::{TypeFoldable, TypeVisitable};
|
||||
use rustc_middle::bug;
|
||||
use rustc_middle::traits::solve::Goal;
|
||||
use rustc_middle::ty::{
|
||||
self, ToPredicate, Ty, TyCtxt, TypeFoldable, TypeFolder, TypeSuperFoldable,
|
||||
};
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeFoldable, TypeFolder, TypeSuperFoldable, Upcast};
|
||||
use rustc_span::sym;
|
||||
|
||||
use crate::solve::EvalCtxt;
|
||||
|
@ -429,7 +427,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_async_callable<'tc
|
|||
tcx.require_lang_item(LangItem::AsyncFnKindHelper, None),
|
||||
[kind_ty, Ty::from_closure_kind(tcx, goal_kind)],
|
||||
)
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
);
|
||||
|
||||
coroutine_closure_to_ambiguous_coroutine(
|
||||
|
@ -456,7 +454,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_async_callable<'tc
|
|||
let nested = vec![
|
||||
bound_sig
|
||||
.rebind(ty::TraitRef::new(tcx, future_trait_def_id, [sig.output()]))
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
];
|
||||
let future_output_def_id = tcx
|
||||
.associated_items(future_trait_def_id)
|
||||
|
@ -484,7 +482,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_async_callable<'tc
|
|||
let mut nested = vec![
|
||||
bound_sig
|
||||
.rebind(ty::TraitRef::new(tcx, future_trait_def_id, [sig.output()]))
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
];
|
||||
|
||||
// Additionally, we need to check that the closure kind
|
||||
|
@ -510,7 +508,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_async_callable<'tc
|
|||
async_fn_kind_trait_def_id,
|
||||
[kind_ty, Ty::from_closure_kind(tcx, goal_kind)],
|
||||
)
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ use rustc_middle::traits::BuiltinImplSource;
|
|||
use rustc_middle::ty::fast_reject::{DeepRejectCtxt, TreatParams};
|
||||
use rustc_middle::ty::NormalizesTo;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
use rustc_middle::ty::{ToPredicate, TypeVisitableExt};
|
||||
use rustc_middle::ty::{TypeVisitableExt, Upcast};
|
||||
use rustc_middle::{bug, span_bug};
|
||||
use rustc_span::{sym, ErrorGuaranteed, DUMMY_SP};
|
||||
|
||||
|
@ -370,7 +370,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for NormalizesTo<'tcx> {
|
|||
),
|
||||
term: output.into(),
|
||||
})
|
||||
.to_predicate(tcx);
|
||||
.upcast(tcx);
|
||||
|
||||
// A built-in `Fn` impl only holds if the output is sized.
|
||||
// (FIXME: technically we only need to check this if the type is a fn ptr...)
|
||||
|
@ -452,7 +452,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for NormalizesTo<'tcx> {
|
|||
ty::ProjectionPredicate { projection_term, term }
|
||||
},
|
||||
)
|
||||
.to_predicate(tcx);
|
||||
.upcast(tcx);
|
||||
|
||||
// A built-in `AsyncFn` impl only holds if the output is sized.
|
||||
// (FIXME: technically we only need to check this if the type is a fn ptr...)
|
||||
|
@ -629,7 +629,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for NormalizesTo<'tcx> {
|
|||
projection_term: ty::AliasTerm::new(ecx.tcx(), goal.predicate.def_id(), [self_ty]),
|
||||
term,
|
||||
}
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
// Technically, we need to check that the future type is Sized,
|
||||
// but that's already proven by the coroutine being WF.
|
||||
[],
|
||||
|
@ -661,7 +661,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for NormalizesTo<'tcx> {
|
|||
projection_term: ty::AliasTerm::new(ecx.tcx(), goal.predicate.def_id(), [self_ty]),
|
||||
term,
|
||||
}
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
// Technically, we need to check that the iterator type is Sized,
|
||||
// but that's already proven by the generator being WF.
|
||||
[],
|
||||
|
@ -749,7 +749,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for NormalizesTo<'tcx> {
|
|||
),
|
||||
term,
|
||||
}
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
// Technically, we need to check that the coroutine type is Sized,
|
||||
// but that's already proven by the coroutine being WF.
|
||||
[],
|
||||
|
|
|
@ -15,7 +15,7 @@ use rustc_middle::traits::solve::inspect::ProbeKind;
|
|||
use rustc_middle::traits::solve::{CandidateSource, Certainty, Goal, QueryResult};
|
||||
use rustc_middle::traits::{BuiltinImplSource, Reveal};
|
||||
use rustc_middle::ty::fast_reject::{DeepRejectCtxt, TreatParams};
|
||||
use rustc_middle::ty::{self, ToPredicate, Ty, TyCtxt};
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, Upcast};
|
||||
use rustc_middle::ty::{TraitPredicate, TypeVisitableExt};
|
||||
use rustc_span::ErrorGuaranteed;
|
||||
|
||||
|
@ -315,7 +315,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
|
|||
.map_bound(|(inputs, _)| {
|
||||
ty::TraitRef::new(tcx, goal.predicate.def_id(), [goal.predicate.self_ty(), inputs])
|
||||
})
|
||||
.to_predicate(tcx);
|
||||
.upcast(tcx);
|
||||
// A built-in `Fn` impl only holds if the output is sized.
|
||||
// (FIXME: technically we only need to check this if the type is a fn ptr...)
|
||||
Self::probe_and_consider_implied_clause(
|
||||
|
@ -363,7 +363,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
|
|||
[goal.predicate.self_ty(), tupled_inputs_ty],
|
||||
)
|
||||
})
|
||||
.to_predicate(tcx);
|
||||
.upcast(tcx);
|
||||
// A built-in `AsyncFn` impl only holds if the output is sized.
|
||||
// (FIXME: technically we only need to check this if the type is a fn ptr...)
|
||||
Self::probe_and_consider_implied_clause(
|
||||
|
@ -560,7 +560,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
|
|||
CandidateSource::BuiltinImpl(BuiltinImplSource::Misc),
|
||||
goal,
|
||||
ty::TraitRef::new(tcx, goal.predicate.def_id(), [self_ty, coroutine.resume_ty()])
|
||||
.to_predicate(tcx),
|
||||
.upcast(tcx),
|
||||
// Technically, we need to check that the coroutine types are Sized,
|
||||
// but that's already proven by the coroutine being WF.
|
||||
[],
|
||||
|
|
|
@ -303,7 +303,7 @@ impl<'tcx> AutoTraitFinder<'tcx> {
|
|||
Err(SelectionError::Unimplemented) => {
|
||||
if self.is_param_no_infer(pred.skip_binder().trait_ref.args) {
|
||||
already_visited.remove(&pred);
|
||||
self.add_user_pred(&mut user_computed_preds, pred.to_predicate(self.tcx));
|
||||
self.add_user_pred(&mut user_computed_preds, pred.upcast(self.tcx));
|
||||
predicates.push_back(pred);
|
||||
} else {
|
||||
debug!(
|
||||
|
|
|
@ -25,8 +25,8 @@ use rustc_macros::extension;
|
|||
use rustc_middle::arena::ArenaAllocatable;
|
||||
use rustc_middle::traits::query::NoSolution;
|
||||
use rustc_middle::ty::error::TypeError;
|
||||
use rustc_middle::ty::ToPredicate;
|
||||
use rustc_middle::ty::TypeFoldable;
|
||||
use rustc_middle::ty::Upcast;
|
||||
use rustc_middle::ty::Variance;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
|
||||
|
@ -96,7 +96,7 @@ impl<'a, 'tcx> ObligationCtxt<'a, 'tcx> {
|
|||
cause,
|
||||
recursion_depth: 0,
|
||||
param_env,
|
||||
predicate: ty::Binder::dummy(trait_ref).to_predicate(tcx),
|
||||
predicate: ty::Binder::dummy(trait_ref).upcast(tcx),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -31,8 +31,8 @@ use rustc_middle::traits::IsConstable;
|
|||
use rustc_middle::ty::error::TypeError::{self, Sorts};
|
||||
use rustc_middle::ty::{
|
||||
self, suggest_arbitrary_trait_bound, suggest_constraining_type_param, AdtKind, GenericArgs,
|
||||
InferTy, IsSuggestable, ToPredicate, Ty, TyCtxt, TypeFoldable, TypeFolder, TypeSuperFoldable,
|
||||
TypeVisitableExt, TypeckResults,
|
||||
InferTy, IsSuggestable, Ty, TyCtxt, TypeFoldable, TypeFolder, TypeSuperFoldable,
|
||||
TypeVisitableExt, TypeckResults, Upcast,
|
||||
};
|
||||
use rustc_middle::{bug, span_bug};
|
||||
use rustc_span::def_id::LocalDefId;
|
||||
|
@ -192,7 +192,7 @@ pub fn suggest_restriction<'tcx, G: EmissionGuarantee>(
|
|||
},
|
||||
// `fn foo(t: impl Trait)`
|
||||
// ^ suggest `where <T as Trait>::A: Bound`
|
||||
predicate_constraint(hir_generics, trait_pred.to_predicate(tcx)),
|
||||
predicate_constraint(hir_generics, trait_pred.upcast(tcx)),
|
||||
];
|
||||
sugg.extend(ty_spans.into_iter().map(|s| (s, type_param_name.to_string())));
|
||||
|
||||
|
@ -215,7 +215,7 @@ pub fn suggest_restriction<'tcx, G: EmissionGuarantee>(
|
|||
.find(|p| !matches!(p.kind, hir::GenericParamKind::Type { synthetic: true, .. })),
|
||||
super_traits,
|
||||
) {
|
||||
(_, None) => predicate_constraint(hir_generics, trait_pred.to_predicate(tcx)),
|
||||
(_, None) => predicate_constraint(hir_generics, trait_pred.upcast(tcx)),
|
||||
(None, Some((ident, []))) => (
|
||||
ident.span.shrink_to_hi(),
|
||||
format!(": {}", trait_pred.print_modifiers_and_trait_path()),
|
||||
|
@ -2703,12 +2703,12 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
|||
obligated_types: &mut Vec<Ty<'tcx>>,
|
||||
seen_requirements: &mut FxHashSet<DefId>,
|
||||
) where
|
||||
T: ToPredicate<'tcx>,
|
||||
T: Upcast<'tcx>,
|
||||
{
|
||||
let mut long_ty_file = None;
|
||||
|
||||
let tcx = self.tcx;
|
||||
let predicate = predicate.to_predicate(tcx);
|
||||
let predicate = predicate.upcast(tcx);
|
||||
match *cause_code {
|
||||
ObligationCauseCode::ExprAssignable
|
||||
| ObligationCauseCode::MatchExpressionArm { .. }
|
||||
|
@ -3378,7 +3378,7 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
|||
break;
|
||||
}
|
||||
data = derived;
|
||||
parent_predicate = child_trait_ref.to_predicate(tcx);
|
||||
parent_predicate = child_trait_ref.upcast(tcx);
|
||||
parent_trait_pred = child_trait_ref;
|
||||
}
|
||||
}
|
||||
|
@ -3392,7 +3392,7 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
|||
}
|
||||
count += 1;
|
||||
data = &child.derived;
|
||||
parent_predicate = child_trait_pred.to_predicate(tcx);
|
||||
parent_predicate = child_trait_pred.upcast(tcx);
|
||||
parent_trait_pred = child_trait_pred;
|
||||
}
|
||||
if count > 0 {
|
||||
|
|
|
@ -42,8 +42,8 @@ use rustc_middle::ty::print::{
|
|||
PrintTraitRefExt as _,
|
||||
};
|
||||
use rustc_middle::ty::{
|
||||
self, SubtypePredicate, ToPolyTraitRef, ToPredicate, TraitRef, Ty, TyCtxt, TypeFoldable,
|
||||
TypeVisitable, TypeVisitableExt,
|
||||
self, SubtypePredicate, ToPolyTraitRef, TraitRef, Ty, TyCtxt, TypeFoldable, TypeVisitable,
|
||||
TypeVisitableExt, Upcast,
|
||||
};
|
||||
use rustc_middle::{bug, span_bug};
|
||||
use rustc_session::config::DumpSolverProofTree;
|
||||
|
@ -302,9 +302,9 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
|||
suggest_increasing_limit: bool,
|
||||
) -> !
|
||||
where
|
||||
T: ToPredicate<'tcx> + Clone,
|
||||
T: Upcast<'tcx> + Clone,
|
||||
{
|
||||
let predicate = obligation.predicate.clone().to_predicate(self.tcx);
|
||||
let predicate = obligation.predicate.clone().upcast(self.tcx);
|
||||
let predicate = self.resolve_vars_if_possible(predicate);
|
||||
self.report_overflow_error(
|
||||
OverflowCause::TraitSolver(predicate),
|
||||
|
|
|
@ -34,7 +34,7 @@ use rustc_middle::query::Providers;
|
|||
use rustc_middle::span_bug;
|
||||
use rustc_middle::ty::fold::TypeFoldable;
|
||||
use rustc_middle::ty::visit::{TypeVisitable, TypeVisitableExt};
|
||||
use rustc_middle::ty::{self, ToPredicate, Ty, TyCtxt, TypeFolder, TypeSuperVisitable};
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeFolder, TypeSuperVisitable, Upcast};
|
||||
use rustc_middle::ty::{GenericArgs, GenericArgsRef};
|
||||
use rustc_span::def_id::DefId;
|
||||
use rustc_span::Span;
|
||||
|
@ -142,7 +142,7 @@ pub fn type_known_to_meet_bound_modulo_regions<'tcx>(
|
|||
fn pred_known_to_hold_modulo_regions<'tcx>(
|
||||
infcx: &InferCtxt<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
pred: impl ToPredicate<'tcx>,
|
||||
pred: impl Upcast<'tcx>,
|
||||
) -> bool {
|
||||
let obligation = Obligation::new(infcx.tcx, ObligationCause::dummy(), param_env, pred);
|
||||
|
||||
|
@ -457,7 +457,7 @@ fn instantiate_and_check_impossible_predicates<'tcx>(
|
|||
// associated items.
|
||||
if let Some(trait_def_id) = tcx.trait_of_item(key.0) {
|
||||
let trait_ref = ty::TraitRef::from_method(tcx, trait_def_id, key.1);
|
||||
predicates.push(ty::Binder::dummy(trait_ref).to_predicate(tcx));
|
||||
predicates.push(ty::Binder::dummy(trait_ref).upcast(tcx));
|
||||
}
|
||||
|
||||
predicates.retain(|predicate| !predicate.has_param());
|
||||
|
|
|
@ -22,7 +22,7 @@ use rustc_middle::ty::{
|
|||
TypeVisitable, TypeVisitor,
|
||||
};
|
||||
use rustc_middle::ty::{GenericArg, GenericArgs};
|
||||
use rustc_middle::ty::{ToPredicate, TypeVisitableExt};
|
||||
use rustc_middle::ty::{TypeVisitableExt, Upcast};
|
||||
use rustc_session::lint::builtin::WHERE_CLAUSES_OBJECT_SAFETY;
|
||||
use rustc_span::symbol::Symbol;
|
||||
use rustc_span::Span;
|
||||
|
@ -649,7 +649,7 @@ fn object_ty_for_trait<'tcx>(
|
|||
));
|
||||
debug!(?trait_predicate);
|
||||
|
||||
let pred: ty::Predicate<'tcx> = trait_ref.to_predicate(tcx);
|
||||
let pred: ty::Predicate<'tcx> = trait_ref.upcast(tcx);
|
||||
let mut elaborated_predicates: Vec<_> = elaborate(tcx, [pred])
|
||||
.filter_map(|pred| {
|
||||
debug!(?pred);
|
||||
|
@ -753,7 +753,7 @@ fn receiver_is_dispatchable<'tcx>(
|
|||
// Self: Unsize<U>
|
||||
let unsize_predicate =
|
||||
ty::TraitRef::new(tcx, unsize_did, [tcx.types.self_param, unsized_self_ty])
|
||||
.to_predicate(tcx);
|
||||
.upcast(tcx);
|
||||
|
||||
// U: Trait<Arg1, ..., ArgN>
|
||||
let trait_predicate = {
|
||||
|
@ -762,7 +762,7 @@ fn receiver_is_dispatchable<'tcx>(
|
|||
if param.index == 0 { unsized_self_ty.into() } else { tcx.mk_param_from_def(param) }
|
||||
});
|
||||
|
||||
ty::TraitRef::new(tcx, trait_def_id, args).to_predicate(tcx)
|
||||
ty::TraitRef::new(tcx, trait_def_id, args).upcast(tcx)
|
||||
};
|
||||
|
||||
let caller_bounds =
|
||||
|
|
|
@ -35,7 +35,7 @@ use rustc_infer::infer::DefineOpaqueTypes;
|
|||
use rustc_middle::traits::select::OverflowError;
|
||||
use rustc_middle::ty::fold::TypeFoldable;
|
||||
use rustc_middle::ty::visit::{MaxUniverse, TypeVisitable, TypeVisitableExt};
|
||||
use rustc_middle::ty::{self, Term, ToPredicate, Ty, TyCtxt};
|
||||
use rustc_middle::ty::{self, Term, Ty, TyCtxt, Upcast};
|
||||
use rustc_span::symbol::sym;
|
||||
|
||||
pub use rustc_middle::traits::Reveal;
|
||||
|
@ -538,7 +538,7 @@ fn normalize_to_error<'a, 'tcx>(
|
|||
cause,
|
||||
recursion_depth: depth,
|
||||
param_env,
|
||||
predicate: trait_ref.to_predicate(selcx.tcx()),
|
||||
predicate: trait_ref.upcast(selcx.tcx()),
|
||||
};
|
||||
Normalized { value: new_value, obligations: vec![trait_obligation] }
|
||||
}
|
||||
|
@ -877,7 +877,7 @@ fn assemble_candidates_from_object_ty<'cx, 'tcx>(
|
|||
let env_predicates = data
|
||||
.projection_bounds()
|
||||
.filter(|bound| bound.item_def_id() == obligation.predicate.def_id)
|
||||
.map(|p| p.with_self_ty(tcx, object_ty).to_predicate(tcx));
|
||||
.map(|p| p.with_self_ty(tcx, object_ty).upcast(tcx));
|
||||
|
||||
assemble_candidates_from_predicates(
|
||||
selcx,
|
||||
|
|
|
@ -14,8 +14,8 @@ use rustc_infer::infer::{DefineOpaqueTypes, InferOk};
|
|||
use rustc_infer::traits::ObligationCauseCode;
|
||||
use rustc_middle::traits::{BuiltinImplSource, SignatureMismatchData};
|
||||
use rustc_middle::ty::{
|
||||
self, GenericArgs, GenericArgsRef, GenericParamDefKind, ToPolyTraitRef, ToPredicate,
|
||||
TraitPredicate, Ty, TyCtxt,
|
||||
self, GenericArgs, GenericArgsRef, GenericParamDefKind, ToPolyTraitRef, TraitPredicate, Ty,
|
||||
TyCtxt, Upcast,
|
||||
};
|
||||
use rustc_middle::{bug, span_bug};
|
||||
use rustc_span::def_id::DefId;
|
||||
|
@ -676,7 +676,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
let assoc_ty_args = tcx.mk_args(&args);
|
||||
let bound =
|
||||
bound.map_bound(|b| b.kind().skip_binder()).instantiate(tcx, assoc_ty_args);
|
||||
ty::Binder::bind_with_vars(bound, bound_vars).to_predicate(tcx)
|
||||
ty::Binder::bind_with_vars(bound, bound_vars).upcast(tcx)
|
||||
};
|
||||
let normalized_bound = normalize_with_depth_to(
|
||||
self,
|
||||
|
@ -1253,13 +1253,13 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
tcx.require_lang_item(LangItem::Sized, Some(obligation.cause.span)),
|
||||
[source],
|
||||
);
|
||||
nested.push(predicate_to_obligation(tr.to_predicate(tcx)));
|
||||
nested.push(predicate_to_obligation(tr.upcast(tcx)));
|
||||
|
||||
// If the type is `Foo + 'a`, ensure that the type
|
||||
// being cast to `Foo + 'a` outlives `'a`:
|
||||
let outlives = ty::OutlivesPredicate(source, r);
|
||||
nested.push(predicate_to_obligation(
|
||||
ty::Binder::dummy(ty::ClauseKind::TypeOutlives(outlives)).to_predicate(tcx),
|
||||
ty::Binder::dummy(ty::ClauseKind::TypeOutlives(outlives)).upcast(tcx),
|
||||
));
|
||||
|
||||
ImplSource::Builtin(BuiltinImplSource::Misc, nested)
|
||||
|
|
|
@ -45,7 +45,7 @@ use rustc_middle::ty::abstract_const::NotConstEvaluatable;
|
|||
use rustc_middle::ty::print::PrintTraitRefExt as _;
|
||||
use rustc_middle::ty::relate::TypeRelation;
|
||||
use rustc_middle::ty::GenericArgsRef;
|
||||
use rustc_middle::ty::{self, PolyProjectionPredicate, ToPredicate};
|
||||
use rustc_middle::ty::{self, PolyProjectionPredicate, Upcast};
|
||||
use rustc_middle::ty::{Ty, TyCtxt, TypeFoldable, TypeVisitableExt};
|
||||
use rustc_span::symbol::sym;
|
||||
use rustc_span::Symbol;
|
||||
|
@ -740,7 +740,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
let cycle = stack.iter().take_while(|s| s.depth > stack_arg.1);
|
||||
let tcx = self.tcx();
|
||||
let cycle =
|
||||
cycle.map(|stack| stack.obligation.predicate.to_predicate(tcx));
|
||||
cycle.map(|stack| stack.obligation.predicate.upcast(tcx));
|
||||
if self.coinductive_match(cycle) {
|
||||
stack.update_reached_depth(stack_arg.1);
|
||||
return Ok(EvaluatedToOk);
|
||||
|
@ -1174,7 +1174,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
// if the regions match exactly.
|
||||
let cycle = stack.iter().skip(1).take_while(|s| s.depth >= cycle_depth);
|
||||
let tcx = self.tcx();
|
||||
let cycle = cycle.map(|stack| stack.obligation.predicate.to_predicate(tcx));
|
||||
let cycle = cycle.map(|stack| stack.obligation.predicate.upcast(tcx));
|
||||
if self.coinductive_match(cycle) {
|
||||
debug!("evaluate_stack --> recursive, coinductive");
|
||||
Some(EvaluatedToOk)
|
||||
|
@ -1379,7 +1379,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
error_obligation: &Obligation<'tcx, T>,
|
||||
) -> Result<(), OverflowError>
|
||||
where
|
||||
T: ToPredicate<'tcx> + Clone,
|
||||
T: Upcast<'tcx> + Clone,
|
||||
{
|
||||
if !self.infcx.tcx.recursion_limit().value_within_limit(depth) {
|
||||
match self.query_mode {
|
||||
|
@ -1408,7 +1408,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
error_obligation: &Obligation<'tcx, V>,
|
||||
) -> Result<(), OverflowError>
|
||||
where
|
||||
V: ToPredicate<'tcx> + Clone,
|
||||
V: Upcast<'tcx> + Clone,
|
||||
{
|
||||
self.check_recursion_depth(obligation.recursion_depth, error_obligation)
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ use rustc_hir::def_id::DefId;
|
|||
use rustc_infer::infer::{InferCtxt, InferOk};
|
||||
use rustc_middle::bug;
|
||||
use rustc_middle::ty::GenericArgsRef;
|
||||
use rustc_middle::ty::{self, ImplSubject, ToPredicate, Ty, TyCtxt, TypeVisitableExt};
|
||||
use rustc_middle::ty::{self, ImplSubject, Ty, TyCtxt, TypeVisitableExt, Upcast};
|
||||
use rustc_middle::ty::{TypeFoldable, TypeFolder, TypeSuperFoldable};
|
||||
use rustc_span::Span;
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
|
@ -105,7 +105,7 @@ impl<'tcx> TraitAliasExpander<'tcx> {
|
|||
fn expand(&mut self, item: &TraitAliasExpansionInfo<'tcx>) -> bool {
|
||||
let tcx = self.tcx;
|
||||
let trait_ref = item.trait_ref();
|
||||
let pred = trait_ref.to_predicate(tcx);
|
||||
let pred = trait_ref.upcast(tcx);
|
||||
|
||||
debug!("expand_trait_aliases: trait_ref={:?}", trait_ref);
|
||||
|
||||
|
@ -122,7 +122,7 @@ impl<'tcx> TraitAliasExpander<'tcx> {
|
|||
.iter()
|
||||
.rev()
|
||||
.skip(1)
|
||||
.any(|&(tr, _)| anonymize_predicate(tcx, tr.to_predicate(tcx)) == anon_pred)
|
||||
.any(|&(tr, _)| anonymize_predicate(tcx, tr.upcast(tcx)) == anon_pred)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ use rustc_middle::query::Providers;
|
|||
use rustc_middle::traits::BuiltinImplSource;
|
||||
use rustc_middle::ty::visit::TypeVisitableExt;
|
||||
use rustc_middle::ty::GenericArgs;
|
||||
use rustc_middle::ty::{self, GenericParamDefKind, ToPredicate, Ty, TyCtxt, VtblEntry};
|
||||
use rustc_middle::ty::{self, GenericParamDefKind, Ty, TyCtxt, Upcast, VtblEntry};
|
||||
use rustc_span::{sym, Span};
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
|
||||
|
@ -87,7 +87,7 @@ fn prepare_vtable_segments_inner<'tcx, T>(
|
|||
|
||||
let mut emit_vptr_on_new_entry = false;
|
||||
let mut visited = PredicateSet::new(tcx);
|
||||
let predicate = trait_ref.to_predicate(tcx);
|
||||
let predicate = trait_ref.upcast(tcx);
|
||||
let mut stack: SmallVec<[(ty::PolyTraitRef<'tcx>, _, _); 5]> =
|
||||
smallvec![(trait_ref, emit_vptr_on_new_entry, maybe_iter(None))];
|
||||
visited.insert(predicate);
|
||||
|
@ -130,7 +130,7 @@ fn prepare_vtable_segments_inner<'tcx, T>(
|
|||
|
||||
// Find an unvisited supertrait
|
||||
match direct_super_traits_iter
|
||||
.find(|&super_trait| visited.insert(super_trait.to_predicate(tcx)))
|
||||
.find(|&super_trait| visited.insert(super_trait.upcast(tcx)))
|
||||
{
|
||||
// Push it to the stack for the next iteration of 'diving_in to pick up
|
||||
Some(unvisited_super_trait) => {
|
||||
|
@ -165,7 +165,7 @@ fn prepare_vtable_segments_inner<'tcx, T>(
|
|||
}
|
||||
|
||||
if let Some(next_inner_most_trait_ref) =
|
||||
siblings.find(|&sibling| visited.insert(sibling.to_predicate(tcx)))
|
||||
siblings.find(|&sibling| visited.insert(sibling.upcast(tcx)))
|
||||
{
|
||||
// We're throwing away potential constness of super traits here.
|
||||
// FIXME: handle ~const super traits
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue