Skip to content

Commit c065f57

Browse files
committed
Remove ToPolyTraitRef impl for TraitRef
1 parent be76bdf commit c065f57

File tree

9 files changed

+33
-45
lines changed

9 files changed

+33
-45
lines changed

compiler/rustc_middle/src/ty/mod.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -769,12 +769,6 @@ pub trait ToPolyTraitRef<'tcx> {
769769
fn to_poly_trait_ref(&self) -> PolyTraitRef<'tcx>;
770770
}
771771

772-
impl<'tcx> ToPolyTraitRef<'tcx> for TraitRef<'tcx> {
773-
fn to_poly_trait_ref(&self) -> PolyTraitRef<'tcx> {
774-
ty::Binder::dummy(*self)
775-
}
776-
}
777-
778772
impl<'tcx> ToPolyTraitRef<'tcx> for PolyTraitPredicate<'tcx> {
779773
fn to_poly_trait_ref(&self) -> PolyTraitRef<'tcx> {
780774
self.map_bound_ref(|trait_pred| trait_pred.trait_ref)

compiler/rustc_middle/src/ty/sty.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -844,8 +844,11 @@ impl<'tcx> TraitRef<'tcx> {
844844

845845
/// Returns a `TraitRef` of the form `P0: Foo<P1..Pn>` where `Pi`
846846
/// are the parameters defined on trait.
847-
pub fn identity(tcx: TyCtxt<'tcx>, def_id: DefId) -> TraitRef<'tcx> {
848-
TraitRef { def_id, substs: InternalSubsts::identity_for_item(tcx, def_id) }
847+
pub fn identity(tcx: TyCtxt<'tcx>, def_id: DefId) -> Binder<'tcx, TraitRef<'tcx>> {
848+
ty::Binder::dummy(TraitRef {
849+
def_id,
850+
substs: InternalSubsts::identity_for_item(tcx, def_id),
851+
})
849852
}
850853

851854
#[inline]

compiler/rustc_trait_selection/src/traits/object_safety.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ fn predicates_reference_self(
250250
trait_def_id: DefId,
251251
supertraits_only: bool,
252252
) -> SmallVec<[Span; 1]> {
253-
let trait_ref = ty::Binder::dummy(ty::TraitRef::identity(tcx, trait_def_id));
253+
let trait_ref = ty::TraitRef::identity(tcx, trait_def_id);
254254
let predicates = if supertraits_only {
255255
tcx.super_predicates_of(trait_def_id)
256256
} else {
@@ -554,11 +554,11 @@ fn object_ty_for_trait<'tcx>(
554554

555555
let trait_ref = ty::TraitRef::identity(tcx, trait_def_id);
556556

557-
let trait_predicate = ty::Binder::dummy(ty::ExistentialPredicate::Trait(
558-
ty::ExistentialTraitRef::erase_self_ty(tcx, trait_ref),
559-
));
557+
let trait_predicate = trait_ref.map_bound(|trait_ref| {
558+
ty::ExistentialPredicate::Trait(ty::ExistentialTraitRef::erase_self_ty(tcx, trait_ref))
559+
});
560560

561-
let mut associated_types = traits::supertraits(tcx, ty::Binder::dummy(trait_ref))
561+
let mut associated_types = traits::supertraits(tcx, trait_ref)
562562
.flat_map(|super_trait_ref| {
563563
tcx.associated_items(super_trait_ref.def_id())
564564
.in_definition_order()
@@ -791,8 +791,7 @@ fn contains_illegal_self_type_reference<'tcx, T: TypeFoldable<'tcx>>(
791791

792792
// Compute supertraits of current trait lazily.
793793
if self.supertraits.is_none() {
794-
let trait_ref =
795-
ty::Binder::dummy(ty::TraitRef::identity(self.tcx, self.trait_def_id));
794+
let trait_ref = ty::TraitRef::identity(self.tcx, self.trait_def_id);
796795
self.supertraits = Some(
797796
traits::supertraits(self.tcx, trait_ref).map(|t| t.def_id()).collect(),
798797
);

compiler/rustc_trait_selection/src/traits/project.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use rustc_hir::lang_items::LangItem;
2727
use rustc_infer::infer::resolve::OpportunisticRegionResolver;
2828
use rustc_middle::ty::fold::{TypeFoldable, TypeFolder};
2929
use rustc_middle::ty::subst::Subst;
30-
use rustc_middle::ty::{self, ToPolyTraitRef, ToPredicate, Ty, TyCtxt, WithConstness};
30+
use rustc_middle::ty::{self, ToPredicate, Ty, TyCtxt, WithConstness};
3131
use rustc_span::symbol::sym;
3232

3333
use std::collections::BTreeMap;
@@ -1020,7 +1020,7 @@ fn normalize_to_error<'a, 'tcx>(
10201020
cause: ObligationCause<'tcx>,
10211021
depth: usize,
10221022
) -> NormalizedTy<'tcx> {
1023-
let trait_ref = projection_ty.trait_ref(selcx.tcx()).to_poly_trait_ref();
1023+
let trait_ref = ty::Binder::dummy(projection_ty.trait_ref(selcx.tcx()));
10241024
let trait_obligation = Obligation {
10251025
cause,
10261026
recursion_depth: depth,
@@ -1282,7 +1282,7 @@ fn assemble_candidates_from_impls<'cx, 'tcx>(
12821282

12831283
// If we are resolving `<T as TraitRef<...>>::Item == Type`,
12841284
// start out by selecting the predicate `T as TraitRef<...>`:
1285-
let poly_trait_ref = obligation.predicate.trait_ref(selcx.tcx()).to_poly_trait_ref();
1285+
let poly_trait_ref = ty::Binder::dummy(obligation.predicate.trait_ref(selcx.tcx()));
12861286
let trait_obligation = obligation.with(poly_trait_ref.to_poly_trait_predicate());
12871287
let _ = selcx.infcx().commit_if_ok(|_| {
12881288
let impl_source = match selcx.select(&trait_obligation) {

compiler/rustc_trait_selection/src/traits/select/confirmation.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
141141
let placeholder_trait_predicate =
142142
self.infcx().replace_bound_vars_with_placeholders(trait_predicate);
143143
let placeholder_self_ty = placeholder_trait_predicate.self_ty();
144+
let placeholder_trait_predicate = ty::Binder::dummy(placeholder_trait_predicate);
144145
let (def_id, substs) = match *placeholder_self_ty.kind() {
145146
ty::Projection(proj) => (proj.item_def_id, proj.substs),
146147
ty::Opaque(def_id, substs) => (def_id, substs),
@@ -164,7 +165,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
164165
obligations.extend(self.infcx.commit_if_ok(|_| {
165166
self.infcx
166167
.at(&obligation.cause, obligation.param_env)
167-
.sup(placeholder_trait_predicate.trait_ref.to_poly_trait_ref(), candidate.value)
168+
.sup(placeholder_trait_predicate.to_poly_trait_ref(), candidate.value)
168169
.map(|InferOk { obligations, .. }| obligations)
169170
.map_err(|_| Unimplemented)
170171
})?);

compiler/rustc_typeck/src/check/method/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use rustc_infer::infer::{self, InferOk};
2121
use rustc_middle::ty::subst::Subst;
2222
use rustc_middle::ty::subst::{InternalSubsts, SubstsRef};
2323
use rustc_middle::ty::GenericParamDefKind;
24-
use rustc_middle::ty::{self, ToPolyTraitRef, ToPredicate, Ty, TypeFoldable, WithConstness};
24+
use rustc_middle::ty::{self, ToPredicate, Ty, TypeFoldable, WithConstness};
2525
use rustc_span::symbol::Ident;
2626
use rustc_span::Span;
2727
use rustc_trait_selection::traits;
@@ -330,7 +330,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
330330
let trait_ref = ty::TraitRef::new(trait_def_id, substs);
331331

332332
// Construct an obligation
333-
let poly_trait_ref = trait_ref.to_poly_trait_ref();
333+
let poly_trait_ref = ty::Binder::dummy(trait_ref);
334334
let obligation = traits::Obligation::misc(
335335
span,
336336
self.body_id,

compiler/rustc_typeck/src/check/method/probe.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ use rustc_infer::infer::{self, InferOk, TyCtxtInferExt};
2121
use rustc_middle::middle::stability;
2222
use rustc_middle::ty::subst::{InternalSubsts, Subst, SubstsRef};
2323
use rustc_middle::ty::GenericParamDefKind;
24-
use rustc_middle::ty::{
25-
self, ParamEnvAnd, ToPolyTraitRef, ToPredicate, Ty, TyCtxt, TypeFoldable, WithConstness,
26-
};
24+
use rustc_middle::ty::{self, ParamEnvAnd, ToPredicate, Ty, TyCtxt, TypeFoldable, WithConstness};
2725
use rustc_session::lint;
2826
use rustc_span::def_id::LocalDefId;
2927
use rustc_span::lev_distance::{find_best_match_for_name, lev_distance};
@@ -967,7 +965,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
967965

968966
if self.tcx.is_trait_alias(trait_def_id) {
969967
// For trait aliases, assume all super-traits are relevant.
970-
let bounds = iter::once(trait_ref.to_poly_trait_ref());
968+
let bounds = iter::once(ty::Binder::dummy(trait_ref));
971969
self.elaborate_bounds(bounds, |this, new_trait_ref, item| {
972970
let new_trait_ref = this.erase_late_bound_regions(new_trait_ref);
973971

@@ -1372,7 +1370,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
13721370
trait_ref: ty::TraitRef<'tcx>,
13731371
) -> traits::SelectionResult<'tcx, traits::Selection<'tcx>> {
13741372
let cause = traits::ObligationCause::misc(self.span, self.body_id);
1375-
let predicate = trait_ref.to_poly_trait_ref().to_poly_trait_predicate();
1373+
let predicate = ty::Binder::dummy(trait_ref).to_poly_trait_predicate();
13761374
let obligation = traits::Obligation::new(cause, self.param_env, predicate);
13771375
traits::SelectionContext::new(self).select(&obligation)
13781376
}

compiler/rustc_typeck/src/check/method/suggest.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ use rustc_hir::{ExprKind, Node, QPath};
1212
use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
1313
use rustc_middle::ty::fast_reject::simplify_type;
1414
use rustc_middle::ty::print::with_crate_prefix;
15-
use rustc_middle::ty::{
16-
self, ToPolyTraitRef, ToPredicate, Ty, TyCtxt, TypeFoldable, WithConstness,
17-
};
15+
use rustc_middle::ty::{self, ToPredicate, Ty, TyCtxt, TypeFoldable, WithConstness};
1816
use rustc_span::lev_distance;
1917
use rustc_span::symbol::{kw, sym, Ident};
2018
use rustc_span::{source_map, FileName, Span};
@@ -53,7 +51,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
5351
.into()],
5452
);
5553
let trait_ref = ty::TraitRef::new(fn_once, fn_once_substs);
56-
let poly_trait_ref = trait_ref.to_poly_trait_ref();
54+
let poly_trait_ref = ty::Binder::dummy(trait_ref);
5755
let obligation = Obligation::misc(
5856
span,
5957
self.body_id,

compiler/rustc_typeck/src/collect.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use rustc_middle::ty::query::Providers;
4040
use rustc_middle::ty::subst::InternalSubsts;
4141
use rustc_middle::ty::util::Discr;
4242
use rustc_middle::ty::util::IntTypeExt;
43-
use rustc_middle::ty::{self, AdtKind, Const, DefIdTree, ToPolyTraitRef, Ty, TyCtxt};
43+
use rustc_middle::ty::{self, AdtKind, Const, DefIdTree, Ty, TyCtxt};
4444
use rustc_middle::ty::{ReprOptions, ToPredicate, WithConstness};
4545
use rustc_session::lint;
4646
use rustc_session::parse::feature_err;
@@ -607,8 +607,7 @@ fn type_param_predicates(
607607
ItemKind::Trait(_, _, ref generics, ..) => {
608608
// Implied `Self: Trait` and supertrait bounds.
609609
if param_id == item_hir_id {
610-
let identity_trait_ref =
611-
ty::Binder::dummy(ty::TraitRef::identity(tcx, item_def_id));
610+
let identity_trait_ref = ty::TraitRef::identity(tcx, item_def_id);
612611
extend =
613612
Some((identity_trait_ref.without_const().to_predicate(tcx), item.span));
614613
}
@@ -2003,14 +2002,11 @@ fn predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericPredicates<'_> {
20032002
// *current* state of an external file.
20042003
span = tcx.sess.source_map().guess_head_span(span);
20052004
}
2006-
result.predicates = tcx.arena.alloc_from_iter(
2007-
result.predicates.iter().copied().chain(std::iter::once((
2008-
ty::Binder::dummy(ty::TraitRef::identity(tcx, def_id))
2009-
.without_const()
2010-
.to_predicate(tcx),
2005+
result.predicates =
2006+
tcx.arena.alloc_from_iter(result.predicates.iter().copied().chain(std::iter::once((
2007+
ty::TraitRef::identity(tcx, def_id).without_const().to_predicate(tcx),
20112008
span,
2012-
))),
2013-
);
2009+
))));
20142010
}
20152011
debug!("predicates_of(def_id={:?}) = {:?}", def_id, result);
20162012
result
@@ -2046,7 +2042,9 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
20462042
match item.kind {
20472043
ItemKind::Impl(ref impl_) => {
20482044
if impl_.defaultness.is_default() {
2049-
is_default_impl_trait = tcx.impl_trait_ref(def_id);
2045+
is_default_impl_trait = tcx
2046+
.impl_trait_ref(def_id)
2047+
.map(|trait_ref| ty::Binder::dummy(trait_ref));
20502048
}
20512049
&impl_.generics
20522050
}
@@ -2126,10 +2124,7 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
21262124
// (see below). Recall that a default impl is not itself an impl, but rather a
21272125
// set of defaults that can be incorporated into another impl.
21282126
if let Some(trait_ref) = is_default_impl_trait {
2129-
predicates.insert((
2130-
trait_ref.to_poly_trait_ref().without_const().to_predicate(tcx),
2131-
tcx.def_span(def_id),
2132-
));
2127+
predicates.insert((trait_ref.without_const().to_predicate(tcx), tcx.def_span(def_id)));
21332128
}
21342129

21352130
// Collect the region predicates that were declared inline as

0 commit comments

Comments
 (0)