Don't return a Binder
from TraitRef::identity
This commit is contained in:
parent
1b8c7784e5
commit
39b95c965a
@ -855,12 +855,8 @@ impl<'tcx> TraitRef<'tcx> {
|
|||||||
|
|
||||||
/// Returns a `TraitRef` of the form `P0: Foo<P1..Pn>` where `Pi`
|
/// Returns a `TraitRef` of the form `P0: Foo<P1..Pn>` where `Pi`
|
||||||
/// are the parameters defined on trait.
|
/// are the parameters defined on trait.
|
||||||
pub fn identity(tcx: TyCtxt<'tcx>, def_id: DefId) -> Binder<'tcx, TraitRef<'tcx>> {
|
pub fn identity(tcx: TyCtxt<'tcx>, def_id: DefId) -> TraitRef<'tcx> {
|
||||||
ty::Binder::dummy(ty::TraitRef::new(
|
ty::TraitRef::new(tcx, def_id, InternalSubsts::identity_for_item(tcx, def_id))
|
||||||
tcx,
|
|
||||||
def_id,
|
|
||||||
InternalSubsts::identity_for_item(tcx, def_id),
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self {
|
pub fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self {
|
||||||
|
@ -87,7 +87,7 @@ pub fn recompute_applicable_impls<'tcx>(
|
|||||||
if let ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred)) = kind.skip_binder()
|
if let ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred)) = kind.skip_binder()
|
||||||
&& param_env_candidate_may_apply(kind.rebind(trait_pred))
|
&& param_env_candidate_may_apply(kind.rebind(trait_pred))
|
||||||
{
|
{
|
||||||
if kind.rebind(trait_pred.trait_ref) == ty::TraitRef::identity(tcx, trait_pred.def_id()) {
|
if kind.rebind(trait_pred.trait_ref) == ty::Binder::dummy(ty::TraitRef::identity(tcx, trait_pred.def_id())) {
|
||||||
ambiguities.push(Ambiguity::ParamEnv(tcx.def_span(trait_pred.def_id())))
|
ambiguities.push(Ambiguity::ParamEnv(tcx.def_span(trait_pred.def_id())))
|
||||||
} else {
|
} else {
|
||||||
ambiguities.push(Ambiguity::ParamEnv(span))
|
ambiguities.push(Ambiguity::ParamEnv(span))
|
||||||
|
@ -279,7 +279,7 @@ fn predicates_reference_self(
|
|||||||
trait_def_id: DefId,
|
trait_def_id: DefId,
|
||||||
supertraits_only: bool,
|
supertraits_only: bool,
|
||||||
) -> SmallVec<[Span; 1]> {
|
) -> SmallVec<[Span; 1]> {
|
||||||
let trait_ref = ty::TraitRef::identity(tcx, trait_def_id);
|
let trait_ref = ty::Binder::dummy(ty::TraitRef::identity(tcx, trait_def_id));
|
||||||
let predicates = if supertraits_only {
|
let predicates = if supertraits_only {
|
||||||
tcx.super_predicates_of(trait_def_id)
|
tcx.super_predicates_of(trait_def_id)
|
||||||
} else {
|
} else {
|
||||||
@ -661,9 +661,9 @@ fn object_ty_for_trait<'tcx>(
|
|||||||
let trait_ref = ty::TraitRef::identity(tcx, trait_def_id);
|
let trait_ref = ty::TraitRef::identity(tcx, trait_def_id);
|
||||||
debug!(?trait_ref);
|
debug!(?trait_ref);
|
||||||
|
|
||||||
let trait_predicate = trait_ref.map_bound(|trait_ref| {
|
let trait_predicate = ty::Binder::dummy(ty::ExistentialPredicate::Trait(
|
||||||
ty::ExistentialPredicate::Trait(ty::ExistentialTraitRef::erase_self_ty(tcx, trait_ref))
|
ty::ExistentialTraitRef::erase_self_ty(tcx, trait_ref),
|
||||||
});
|
));
|
||||||
debug!(?trait_predicate);
|
debug!(?trait_predicate);
|
||||||
|
|
||||||
let pred: ty::Predicate<'tcx> = trait_ref.to_predicate(tcx);
|
let pred: ty::Predicate<'tcx> = trait_ref.to_predicate(tcx);
|
||||||
@ -880,7 +880,8 @@ fn contains_illegal_self_type_reference<'tcx, T: TypeVisitable<TyCtxt<'tcx>>>(
|
|||||||
|
|
||||||
// Compute supertraits of current trait lazily.
|
// Compute supertraits of current trait lazily.
|
||||||
if self.supertraits.is_none() {
|
if self.supertraits.is_none() {
|
||||||
let trait_ref = ty::TraitRef::identity(self.tcx, self.trait_def_id);
|
let trait_ref =
|
||||||
|
ty::Binder::dummy(ty::TraitRef::identity(self.tcx, self.trait_def_id));
|
||||||
self.supertraits = Some(
|
self.supertraits = Some(
|
||||||
traits::supertraits(self.tcx, trait_ref).map(|t| t.def_id()).collect(),
|
traits::supertraits(self.tcx, trait_ref).map(|t| t.def_id()).collect(),
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user