Skip to content

Commit 6604643

Browse files
committed
1 parent c103612 commit 6604643

File tree

4 files changed

+80
-90
lines changed

4 files changed

+80
-90
lines changed

rust-toolchain

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
nightly-2020-07-23
1+
nightly-2020-07-28

src/translate.rs

Lines changed: 69 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -365,105 +365,95 @@ impl<'a, 'tcx> TranslationContext<'a, 'tcx> {
365365
predicate: Predicate<'tcx>,
366366
) -> Option<Predicate<'tcx>> {
367367
use rustc_middle::ty::{
368-
Binder, OutlivesPredicate, PredicateKind, ProjectionPredicate, ProjectionTy,
368+
OutlivesPredicate, PredicateAtom, PredicateKind, ProjectionPredicate, ProjectionTy,
369369
SubtypePredicate, ToPredicate, TraitPredicate, WithOptConstParam,
370370
};
371371

372-
Some(match predicate.kind() {
373-
PredicateKind::Trait(trait_predicate, constness) => PredicateKind::Trait(
374-
Binder::bind(
375-
if let Some((target_def_id, target_substs)) = self.translate_orig_substs(
376-
index_map,
377-
trait_predicate.skip_binder().trait_ref.def_id,
378-
trait_predicate.skip_binder().trait_ref.substs,
379-
) {
380-
TraitPredicate {
381-
trait_ref: TraitRef {
382-
def_id: target_def_id,
383-
substs: target_substs,
384-
},
385-
}
386-
} else {
387-
return None;
388-
},
389-
),
390-
*constness,
372+
Some(match predicate.skip_binders() {
373+
PredicateAtom::Trait(pred, constness) => PredicateAtom::Trait(
374+
if let Some((target_def_id, target_substs)) = self.translate_orig_substs(
375+
index_map,
376+
pred.trait_ref.def_id,
377+
pred.trait_ref.substs,
378+
) {
379+
TraitPredicate {
380+
trait_ref: TraitRef {
381+
def_id: target_def_id,
382+
substs: target_substs,
383+
},
384+
}
385+
} else {
386+
return None;
387+
},
388+
constness,
391389
)
392-
.to_predicate(self.tcx),
393-
PredicateKind::RegionOutlives(region_outlives_predicate) => {
394-
PredicateKind::RegionOutlives(region_outlives_predicate.map_bound(|r_pred| {
395-
let l = self.translate_region(r_pred.0);
396-
let r = self.translate_region(r_pred.1);
397-
OutlivesPredicate(l, r)
398-
}))
399-
.to_predicate(self.tcx)
400-
}
401-
PredicateKind::TypeOutlives(type_outlives_predicate) => {
402-
PredicateKind::TypeOutlives(type_outlives_predicate.map_bound(|r_pred| {
403-
let l = self.translate(index_map, &r_pred.0);
404-
let r = self.translate_region(r_pred.1);
405-
OutlivesPredicate(l, r)
406-
}))
407-
.to_predicate(self.tcx)
408-
}
409-
PredicateKind::Projection(projection_predicate) => {
410-
PredicateKind::Projection(Binder::bind(
411-
if let Some((target_def_id, target_substs)) = self.translate_orig_substs(
412-
index_map,
413-
projection_predicate.skip_binder().projection_ty.item_def_id,
414-
projection_predicate.skip_binder().projection_ty.substs,
415-
) {
416-
ProjectionPredicate {
417-
projection_ty: ProjectionTy {
418-
substs: target_substs,
419-
item_def_id: target_def_id,
420-
},
421-
ty: self.translate(index_map, &projection_predicate.skip_binder().ty),
422-
}
423-
} else {
424-
return None;
425-
},
426-
))
427-
.to_predicate(self.tcx)
428-
}
429-
PredicateKind::WellFormed(ty) => {
430-
PredicateKind::WellFormed(self.translate(index_map, &ty)).to_predicate(self.tcx)
390+
.potentially_quantified(self.tcx, PredicateKind::ForAll),
391+
PredicateAtom::RegionOutlives(pred) => PredicateAtom::RegionOutlives({
392+
let l = self.translate_region(pred.0);
393+
let r = self.translate_region(pred.1);
394+
OutlivesPredicate(l, r)
395+
})
396+
.potentially_quantified(self.tcx, PredicateKind::ForAll),
397+
PredicateAtom::TypeOutlives(pred) => PredicateAtom::TypeOutlives({
398+
let l = self.translate(index_map, &pred.0);
399+
let r = self.translate_region(pred.1);
400+
OutlivesPredicate(l, r)
401+
})
402+
.potentially_quantified(self.tcx, PredicateKind::ForAll),
403+
PredicateAtom::Projection(pred) => PredicateAtom::Projection(
404+
if let Some((target_def_id, target_substs)) = self.translate_orig_substs(
405+
index_map,
406+
pred.projection_ty.item_def_id,
407+
pred.projection_ty.substs,
408+
) {
409+
ProjectionPredicate {
410+
projection_ty: ProjectionTy {
411+
substs: target_substs,
412+
item_def_id: target_def_id,
413+
},
414+
ty: self.translate(index_map, &pred.ty),
415+
}
416+
} else {
417+
return None;
418+
},
419+
)
420+
.potentially_quantified(self.tcx, PredicateKind::ForAll),
421+
PredicateAtom::WellFormed(ty) => {
422+
PredicateAtom::WellFormed(self.translate(index_map, &ty)).to_predicate(self.tcx)
431423
}
432-
PredicateKind::ObjectSafe(did) => {
433-
PredicateKind::ObjectSafe(self.translate_orig(*did)).to_predicate(self.tcx)
424+
PredicateAtom::ObjectSafe(did) => {
425+
PredicateAtom::ObjectSafe(self.translate_orig(did)).to_predicate(self.tcx)
434426
}
435-
PredicateKind::ClosureKind(did, substs, kind) => PredicateKind::ClosureKind(
436-
self.translate_orig(*did),
427+
PredicateAtom::ClosureKind(did, substs, kind) => PredicateAtom::ClosureKind(
428+
self.translate_orig(did),
437429
self.translate(index_map, &substs),
438-
*kind,
430+
kind,
439431
)
440432
.to_predicate(self.tcx),
441-
PredicateKind::Subtype(subtype_predicate) => {
442-
PredicateKind::Subtype(subtype_predicate.map_bound(|s_pred| {
443-
let l = self.translate(index_map, &s_pred.a);
444-
let r = self.translate(index_map, &s_pred.b);
445-
SubtypePredicate {
446-
a_is_expected: s_pred.a_is_expected,
447-
a: l,
448-
b: r,
449-
}
450-
}))
451-
.to_predicate(self.tcx)
452-
}
453-
PredicateKind::ConstEvaluatable(param, orig_substs) => {
433+
PredicateAtom::Subtype(pred) => PredicateAtom::Subtype({
434+
let l = self.translate(index_map, &pred.a);
435+
let r = self.translate(index_map, &pred.b);
436+
SubtypePredicate {
437+
a_is_expected: pred.a_is_expected,
438+
a: l,
439+
b: r,
440+
}
441+
})
442+
.to_predicate(self.tcx),
443+
PredicateAtom::ConstEvaluatable(param, orig_substs) => {
454444
if let Some((target_def_id, target_substs)) =
455445
self.translate_orig_substs(index_map, param.did, orig_substs)
456446
{
457447
// TODO: We could probably use translated version for
458448
// `WithOptConstParam::const_param_did`
459449
let const_param = WithOptConstParam::unknown(target_def_id);
460-
PredicateKind::ConstEvaluatable(const_param, target_substs)
450+
PredicateAtom::ConstEvaluatable(const_param, target_substs)
461451
.to_predicate(self.tcx)
462452
} else {
463453
return None;
464454
}
465455
}
466-
PredicateKind::ConstEquate(c1, c2) => PredicateKind::ConstEquate(
456+
PredicateAtom::ConstEquate(c1, c2) => PredicateAtom::ConstEquate(
467457
self.translate(index_map, &c1),
468458
self.translate(index_map, &c2),
469459
)
@@ -503,7 +493,6 @@ impl<'a, 'tcx> TranslationContext<'a, 'tcx> {
503493
self.tcx.intern_predicates(&target_preds),
504494
param_env.reveal(),
505495
param_env.def_id,
506-
507496
)
508497
})
509498
}

src/traverse.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ fn diff_traits<'tcx>(
570570
) {
571571
use rustc_hir::Unsafety::Unsafe;
572572
use rustc_middle::ty::subst::GenericArgKind::Type;
573-
use rustc_middle::ty::{ParamTy, PredicateKind, TyS};
573+
use rustc_middle::ty::{ParamTy, PredicateAtom, TyS};
574574

575575
debug!(
576576
"diff_traits: old: {:?}, new: {:?}, output: {:?}",
@@ -592,8 +592,8 @@ fn diff_traits<'tcx>(
592592
let old_param_env = tcx.param_env(old);
593593

594594
for bound in old_param_env.caller_bounds() {
595-
if let PredicateKind::Trait(pred, _) = *bound.kind() {
596-
let trait_ref = pred.skip_binder().trait_ref;
595+
if let PredicateAtom::Trait(pred, _) = bound.skip_binders() {
596+
let trait_ref = pred.trait_ref;
597597

598598
debug!("trait_ref substs (old): {:?}", trait_ref.substs);
599599

src/typeck.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ use rustc_middle::{
1818
error::TypeError,
1919
fold::TypeFoldable,
2020
subst::{GenericArg, InternalSubsts, SubstsRef},
21-
GenericParamDefKind, ParamEnv, Predicate, PredicateKind, ToPredicate, TraitRef, Ty, TyCtxt,
21+
GenericParamDefKind, ParamEnv, Predicate, PredicateAtom, PredicateKind, TraitRef, Ty,
22+
TyCtxt,
2223
},
2324
};
2425
use rustc_trait_selection::traits::FulfillmentContext;
@@ -73,15 +74,15 @@ impl<'a, 'tcx> BoundContext<'a, 'tcx> {
7374
/// Register the trait bound represented by a `TraitRef`.
7475
pub fn register_trait_ref(&mut self, checked_trait_ref: TraitRef<'tcx>) {
7576
use rustc_hir::Constness;
76-
use rustc_middle::ty::{Binder, TraitPredicate};
77+
use rustc_middle::ty::TraitPredicate;
7778

78-
let predicate = PredicateKind::Trait(
79-
Binder::bind(TraitPredicate {
79+
let predicate = PredicateAtom::Trait(
80+
TraitPredicate {
8081
trait_ref: checked_trait_ref,
81-
}),
82+
},
8283
Constness::NotConst,
8384
)
84-
.to_predicate(self.infcx.tcx);
85+
.potentially_quantified(self.infcx.tcx, PredicateKind::ForAll);
8586
let obligation = Obligation::new(ObligationCause::dummy(), self.given_param_env, predicate);
8687
self.fulfill_cx
8788
.register_predicate_obligation(self.infcx, obligation);

0 commit comments

Comments
 (0)