Skip to content

Commit 6b7fa4e

Browse files
authored
Rollup merge of rust-lang#104586 - oli-obk:santa-clauses-make-goals, r=jackh726
get rid of to_poly_trait_predicate and many `without_const` calls continuation of rust-lang#104483 r? `@compiler-errors`
2 parents dd066cd + b19cf14 commit 6b7fa4e

File tree

22 files changed

+57
-89
lines changed

22 files changed

+57
-89
lines changed

compiler/rustc_const_eval/src/transform/check_consts/check.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use rustc_middle::mir::visit::{MutatingUseContext, NonMutatingUseContext, PlaceC
1010
use rustc_middle::mir::*;
1111
use rustc_middle::ty::subst::{GenericArgKind, InternalSubsts};
1212
use rustc_middle::ty::{self, adjustment::PointerCast, Instance, InstanceDef, Ty, TyCtxt};
13-
use rustc_middle::ty::{Binder, TraitPredicate, TraitRef, TypeVisitable};
13+
use rustc_middle::ty::{Binder, TraitRef, TypeVisitable};
1414
use rustc_mir_dataflow::{self, Analysis};
1515
use rustc_span::{sym, Span, Symbol};
1616
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
@@ -726,11 +726,8 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
726726
}
727727

728728
let trait_ref = TraitRef::from_method(tcx, trait_id, substs);
729-
let poly_trait_pred = Binder::dummy(TraitPredicate {
730-
trait_ref,
731-
constness: ty::BoundConstness::ConstIfConst,
732-
polarity: ty::ImplPolarity::Positive,
733-
});
729+
let poly_trait_pred =
730+
Binder::dummy(trait_ref).with_constness(ty::BoundConstness::ConstIfConst);
734731
let obligation =
735732
Obligation::new(tcx, ObligationCause::dummy(), param_env, poly_trait_pred);
736733

@@ -819,9 +816,7 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
819816
tcx,
820817
ObligationCause::dummy_with_span(*fn_span),
821818
param_env,
822-
tcx.mk_predicate(
823-
poly_trait_pred.map_bound(ty::PredicateKind::Trait),
824-
),
819+
poly_trait_pred,
825820
);
826821

827822
// improve diagnostics by showing what failed. Our requirements are stricter this time

compiler/rustc_const_eval/src/transform/check_consts/ops.rs

+3-8
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@ use rustc_middle::mir;
1313
use rustc_middle::ty::print::with_no_trimmed_paths;
1414
use rustc_middle::ty::subst::{GenericArgKind, SubstsRef};
1515
use rustc_middle::ty::{
16-
suggest_constraining_type_param, Adt, Closure, DefIdTree, FnDef, FnPtr, Param, TraitPredicate,
17-
Ty,
16+
suggest_constraining_type_param, Adt, Closure, DefIdTree, FnDef, FnPtr, Param, Ty,
1817
};
19-
use rustc_middle::ty::{Binder, BoundConstness, ImplPolarity, TraitRef};
18+
use rustc_middle::ty::{Binder, TraitRef};
2019
use rustc_session::parse::feature_err;
2120
use rustc_span::symbol::sym;
2221
use rustc_span::{BytePos, Pos, Span, Symbol};
@@ -150,11 +149,7 @@ impl<'tcx> NonConstOp<'tcx> for FnCallNonConst<'tcx> {
150149
tcx,
151150
ObligationCause::dummy(),
152151
param_env,
153-
Binder::dummy(TraitPredicate {
154-
trait_ref,
155-
constness: BoundConstness::NotConst,
156-
polarity: ImplPolarity::Positive,
157-
}),
152+
Binder::dummy(trait_ref),
158153
);
159154

160155
let infcx = tcx.infer_ctxt().build();

compiler/rustc_const_eval/src/transform/check_consts/qualifs.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,8 @@ impl Qualif for NeedsNonConstDrop {
157157
cx.tcx,
158158
ObligationCause::dummy_with_span(cx.body.span),
159159
cx.param_env,
160-
ty::Binder::dummy(ty::TraitPredicate {
161-
trait_ref: cx.tcx.at(cx.body.span).mk_trait_ref(LangItem::Destruct, [ty]),
162-
constness: ty::BoundConstness::ConstIfConst,
163-
polarity: ty::ImplPolarity::Positive,
164-
}),
160+
ty::Binder::dummy(cx.tcx.at(cx.body.span).mk_trait_ref(LangItem::Destruct, [ty]))
161+
.with_constness(ty::BoundConstness::ConstIfConst),
165162
);
166163

167164
let infcx = cx.tcx.infer_ctxt().build();

compiler/rustc_hir_analysis/src/check/wfcheck.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1784,7 +1784,7 @@ fn receiver_is_implemented<'tcx>(
17841784
let tcx = wfcx.tcx();
17851785
let trait_ref = ty::Binder::dummy(tcx.mk_trait_ref(receiver_trait_def_id, [receiver_ty]));
17861786

1787-
let obligation = traits::Obligation::new(tcx, cause, wfcx.param_env, trait_ref.without_const());
1787+
let obligation = traits::Obligation::new(tcx, cause, wfcx.param_env, trait_ref);
17881788

17891789
if wfcx.infcx.predicate_must_hold_modulo_regions(&obligation) {
17901790
true

compiler/rustc_hir_typeck/src/coercion.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -805,8 +805,7 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> {
805805
self.param_env,
806806
ty::Binder::dummy(
807807
self.tcx.at(self.cause.span).mk_trait_ref(hir::LangItem::PointerSized, [a]),
808-
)
809-
.to_poly_trait_predicate(),
808+
),
810809
));
811810
}
812811

compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -2157,11 +2157,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
21572157
self.tcx,
21582158
traits::ObligationCause::dummy(),
21592159
self.param_env,
2160-
ty::Binder::dummy(ty::TraitPredicate {
2161-
trait_ref,
2162-
constness: ty::BoundConstness::NotConst,
2163-
polarity: ty::ImplPolarity::Positive,
2164-
}),
2160+
ty::Binder::dummy(trait_ref),
21652161
);
21662162
match SelectionContext::new(&self).select(&obligation) {
21672163
Ok(Some(traits::ImplSource::UserDefined(impl_source))) => {

compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1096,8 +1096,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
10961096
ty::Binder::dummy(self.tcx.mk_trait_ref(
10971097
into_def_id,
10981098
[expr_ty, expected_ty]
1099-
))
1100-
.to_poly_trait_predicate(),
1099+
)),
11011100
))
11021101
{
11031102
let sugg = if expr.precedence().order() >= PREC_POSTFIX {

compiler/rustc_hir_typeck/src/method/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
348348
},
349349
),
350350
self.param_env,
351-
poly_trait_ref.without_const(),
351+
poly_trait_ref,
352352
),
353353
substs,
354354
)

compiler/rustc_hir_typeck/src/method/probe.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1430,7 +1430,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
14301430
trait_ref: ty::TraitRef<'tcx>,
14311431
) -> traits::SelectionResult<'tcx, traits::Selection<'tcx>> {
14321432
let cause = traits::ObligationCause::misc(self.span, self.body_id);
1433-
let predicate = ty::Binder::dummy(trait_ref).to_poly_trait_predicate();
1433+
let predicate = ty::Binder::dummy(trait_ref);
14341434
let obligation = traits::Obligation::new(self.tcx, cause, self.param_env, predicate);
14351435
traits::SelectionContext::new(self).select(&obligation)
14361436
}

compiler/rustc_middle/src/ty/mod.rs

+19
Original file line numberDiff line numberDiff line change
@@ -1152,6 +1152,25 @@ impl<'tcx> ToPredicate<'tcx, Predicate<'tcx>> for Binder<'tcx, PredicateKind<'tc
11521152
}
11531153
}
11541154

1155+
impl<'tcx> ToPredicate<'tcx, Predicate<'tcx>> for Binder<'tcx, TraitRef<'tcx>> {
1156+
#[inline(always)]
1157+
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
1158+
let pred: PolyTraitPredicate<'tcx> = self.to_predicate(tcx);
1159+
pred.to_predicate(tcx)
1160+
}
1161+
}
1162+
1163+
impl<'tcx> ToPredicate<'tcx, PolyTraitPredicate<'tcx>> for Binder<'tcx, TraitRef<'tcx>> {
1164+
#[inline(always)]
1165+
fn to_predicate(self, _: TyCtxt<'tcx>) -> PolyTraitPredicate<'tcx> {
1166+
self.map_bound(|trait_ref| TraitPredicate {
1167+
trait_ref,
1168+
constness: ty::BoundConstness::NotConst,
1169+
polarity: ty::ImplPolarity::Positive,
1170+
})
1171+
}
1172+
}
1173+
11551174
impl<'tcx> ToPredicate<'tcx, Predicate<'tcx>> for PolyTraitPredicate<'tcx> {
11561175
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
11571176
self.map_bound(PredicateKind::Trait).to_predicate(tcx)

compiler/rustc_middle/src/ty/sty.rs

-17
Original file line numberDiff line numberDiff line change
@@ -853,23 +853,6 @@ impl<'tcx> PolyTraitRef<'tcx> {
853853
pub fn def_id(&self) -> DefId {
854854
self.skip_binder().def_id
855855
}
856-
857-
pub fn to_poly_trait_predicate(&self) -> ty::PolyTraitPredicate<'tcx> {
858-
self.map_bound(|trait_ref| ty::TraitPredicate {
859-
trait_ref,
860-
constness: ty::BoundConstness::NotConst,
861-
polarity: ty::ImplPolarity::Positive,
862-
})
863-
}
864-
865-
/// Same as [`PolyTraitRef::to_poly_trait_predicate`] but sets a negative polarity instead.
866-
pub fn to_poly_trait_predicate_negative_polarity(&self) -> ty::PolyTraitPredicate<'tcx> {
867-
self.map_bound(|trait_ref| ty::TraitPredicate {
868-
trait_ref,
869-
constness: ty::BoundConstness::NotConst,
870-
polarity: ty::ImplPolarity::Negative,
871-
})
872-
}
873856
}
874857

875858
impl rustc_errors::IntoDiagnosticArg for PolyTraitRef<'_> {

compiler/rustc_trait_selection/src/autoderef.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ impl<'a, 'tcx> Autoderef<'a, 'tcx> {
130130
tcx,
131131
cause.clone(),
132132
self.param_env,
133-
ty::Binder::dummy(trait_ref).without_const(),
133+
ty::Binder::dummy(trait_ref),
134134
);
135135
if !self.infcx.predicate_may_hold(&obligation) {
136136
debug!("overloaded_deref_ty: cannot match obligation");

compiler/rustc_trait_selection/src/traits/auto_trait.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::traits::project::ProjectAndUnifyResult;
1010
use rustc_middle::mir::interpret::ErrorHandled;
1111
use rustc_middle::ty::fold::{TypeFolder, TypeSuperFoldable};
1212
use rustc_middle::ty::visit::TypeVisitable;
13-
use rustc_middle::ty::{PolyTraitRef, Region, RegionVid};
13+
use rustc_middle::ty::{ImplPolarity, Region, RegionVid};
1414

1515
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexSet};
1616

@@ -88,19 +88,22 @@ impl<'tcx> AutoTraitFinder<'tcx> {
8888

8989
let trait_ref = tcx.mk_trait_ref(trait_did, [ty]);
9090

91-
let trait_pred = ty::Binder::dummy(trait_ref);
92-
9391
let infcx = tcx.infer_ctxt().build();
9492
let mut selcx = SelectionContext::new(&infcx);
95-
for f in [
96-
PolyTraitRef::to_poly_trait_predicate,
97-
PolyTraitRef::to_poly_trait_predicate_negative_polarity,
98-
] {
93+
for polarity in [true, false] {
9994
let result = selcx.select(&Obligation::new(
10095
tcx,
10196
ObligationCause::dummy(),
10297
orig_env,
103-
f(&trait_pred),
98+
ty::Binder::dummy(ty::TraitPredicate {
99+
trait_ref,
100+
constness: ty::BoundConstness::NotConst,
101+
polarity: if polarity {
102+
ImplPolarity::Positive
103+
} else {
104+
ImplPolarity::Negative
105+
},
106+
}),
104107
));
105108
if let Ok(Some(ImplSource::UserDefined(_))) = result {
106109
debug!(

compiler/rustc_trait_selection/src/traits/codegen.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ pub fn codegen_select_candidate<'tcx>(
3939
let mut selcx = SelectionContext::new(&infcx);
4040

4141
let obligation_cause = ObligationCause::dummy();
42-
let obligation =
43-
Obligation::new(tcx, obligation_cause, param_env, trait_ref.to_poly_trait_predicate());
42+
let obligation = Obligation::new(tcx, obligation_cause, param_env, trait_ref);
4443

4544
let selection = match selcx.select(&obligation) {
4645
Ok(Some(selection)) => selection,

compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2111,7 +2111,7 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
21112111
)
21122112
};
21132113

2114-
let obligation = obligation.with(self.tcx, trait_ref.to_poly_trait_predicate());
2114+
let obligation = obligation.with(self.tcx, trait_ref);
21152115
let mut selcx = SelectionContext::with_query_mode(
21162116
&self,
21172117
crate::traits::TraitQueryMode::Standard,

compiler/rustc_trait_selection/src/traits/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ fn subst_and_check_impossible_predicates<'tcx>(
477477
// associated items.
478478
if let Some(trait_def_id) = tcx.trait_of_item(key.0) {
479479
let trait_ref = ty::TraitRef::from_method(tcx, trait_def_id, key.1);
480-
predicates.push(ty::Binder::dummy(trait_ref).to_poly_trait_predicate().to_predicate(tcx));
480+
predicates.push(ty::Binder::dummy(trait_ref).to_predicate(tcx));
481481
}
482482

483483
predicates.retain(|predicate| !predicate.needs_subst());

compiler/rustc_trait_selection/src/traits/object_safety.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -723,8 +723,7 @@ fn receiver_is_dispatchable<'tcx>(
723723
let obligation = {
724724
let predicate = ty::Binder::dummy(
725725
tcx.mk_trait_ref(dispatch_from_dyn_did, [receiver_ty, unsized_receiver_ty]),
726-
)
727-
.without_const();
726+
);
728727

729728
Obligation::new(tcx, ObligationCause::dummy(), param_env, predicate)
730729
};

compiler/rustc_trait_selection/src/traits/project.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1343,8 +1343,7 @@ fn assemble_candidate_for_impl_trait_in_trait<'cx, 'tcx>(
13431343
obligation.predicate.substs.truncate_to(tcx, tcx.generics_of(trait_def_id));
13441344
// FIXME(named-returns): Binders
13451345
let trait_predicate =
1346-
ty::Binder::dummy(ty::TraitRef { def_id: trait_def_id, substs: trait_substs })
1347-
.to_poly_trait_predicate();
1346+
ty::Binder::dummy(ty::TraitRef { def_id: trait_def_id, substs: trait_substs });
13481347

13491348
let _ = selcx.infcx().commit_if_ok(|_| {
13501349
match selcx.select(&obligation.with(tcx, trait_predicate)) {
@@ -1542,7 +1541,7 @@ fn assemble_candidates_from_impls<'cx, 'tcx>(
15421541
// If we are resolving `<T as TraitRef<...>>::Item == Type`,
15431542
// start out by selecting the predicate `T as TraitRef<...>`:
15441543
let poly_trait_ref = ty::Binder::dummy(obligation.predicate.trait_ref(selcx.tcx()));
1545-
let trait_obligation = obligation.with(selcx.tcx(), poly_trait_ref.to_poly_trait_predicate());
1544+
let trait_obligation = obligation.with(selcx.tcx(), poly_trait_ref);
15461545
let _ = selcx.infcx().commit_if_ok(|_| {
15471546
let impl_source = match selcx.select(&trait_obligation) {
15481547
Ok(Some(impl_source)) => impl_source,

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

+2-6
Original file line numberDiff line numberDiff line change
@@ -715,12 +715,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
715715
// <ty as Deref>
716716
let trait_ref = tcx.mk_trait_ref(tcx.lang_items().deref_trait()?, [ty]);
717717

718-
let obligation = traits::Obligation::new(
719-
tcx,
720-
cause.clone(),
721-
param_env,
722-
ty::Binder::dummy(trait_ref).without_const(),
723-
);
718+
let obligation =
719+
traits::Obligation::new(tcx, cause.clone(), param_env, ty::Binder::dummy(trait_ref));
724720
if !self.infcx.predicate_may_hold(&obligation) {
725721
return None;
726722
}

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

+1-6
Original file line numberDiff line numberDiff line change
@@ -634,12 +634,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
634634
);
635635
let tr =
636636
ty::Binder::dummy(self.tcx().at(cause.span).mk_trait_ref(LangItem::Sized, [output_ty]));
637-
nested.push(Obligation::new(
638-
self.infcx.tcx,
639-
cause,
640-
obligation.param_env,
641-
tr.to_poly_trait_predicate(),
642-
));
637+
nested.push(Obligation::new(self.infcx.tcx, cause, obligation.param_env, tr));
643638

644639
Ok(ImplSourceFnPointerData { fn_ty: self_ty, nested })
645640
}

src/librustdoc/clean/blanket_impl.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,7 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
6767
.instantiate(cx.tcx, impl_substs)
6868
.predicates
6969
.into_iter()
70-
.chain(Some(
71-
ty::Binder::dummy(impl_trait_ref)
72-
.to_poly_trait_predicate()
73-
.map_bound(ty::PredicateKind::Trait)
74-
.to_predicate(infcx.tcx),
75-
));
70+
.chain(Some(ty::Binder::dummy(impl_trait_ref).to_predicate(infcx.tcx)));
7671
for predicate in predicates {
7772
debug!("testing predicate {:?}", predicate);
7873
let obligation = traits::Obligation::new(

src/tools/clippy/clippy_lints/src/ptr.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -698,9 +698,8 @@ fn matches_preds<'tcx>(
698698
cx.tcx,
699699
ObligationCause::dummy(),
700700
cx.param_env,
701-
cx.tcx.mk_predicate(Binder::bind_with_vars(
701+
cx.tcx.mk_predicate(Binder::dummy(
702702
PredicateKind::Projection(p.with_self_ty(cx.tcx, ty)),
703-
List::empty(),
704703
)),
705704
)),
706705
ExistentialPredicate::AutoTrait(p) => infcx

0 commit comments

Comments
 (0)