Skip to content

Commit 3fc536f

Browse files
committed
WIP: Fix breakage due to rust-lang/rust#73503
See rust-lang/rust#73503
1 parent f58afc6 commit 3fc536f

File tree

4 files changed

+78
-80
lines changed

4 files changed

+78
-80
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: 68 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -364,106 +364,102 @@ impl<'a, 'tcx> TranslationContext<'a, 'tcx> {
364364
index_map: &HashMap<u32, DefId>,
365365
predicate: Predicate<'tcx>,
366366
) -> Option<Predicate<'tcx>> {
367+
use rustc_middle::ty::PredicateAtom;
367368
use rustc_middle::ty::{
368369
Binder, OutlivesPredicate, PredicateKind, ProjectionPredicate, ProjectionTy,
369370
SubtypePredicate, ToPredicate, TraitPredicate, WithOptConstParam,
370371
};
371372

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,
373+
Some(match predicate.skip_binders() {
374+
PredicateAtom::Trait(trait_predicate, constness) => PredicateAtom::Trait(
375+
if let Some((target_def_id, target_substs)) = self.translate_orig_substs(
376+
index_map,
377+
trait_predicate.trait_ref.def_id,
378+
trait_predicate.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+
constness,
391390
)
392391
.to_predicate(self.tcx),
393-
PredicateKind::RegionOutlives(region_outlives_predicate) => {
394-
PredicateKind::RegionOutlives(region_outlives_predicate.map_bound(|r_pred| {
392+
PredicateAtom::RegionOutlives(region_outlives_predicate) => {
393+
PredicateAtom::RegionOutlives({
394+
let r_pred = region_outlives_predicate;
395395
let l = self.translate_region(r_pred.0);
396396
let r = self.translate_region(r_pred.1);
397397
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-
))
398+
})
427399
.to_predicate(self.tcx)
428400
}
429-
PredicateKind::WellFormed(ty) => {
430-
PredicateKind::WellFormed(self.translate(index_map, &ty)).to_predicate(self.tcx)
401+
PredicateAtom::TypeOutlives(type_outlives_predicate) => PredicateAtom::TypeOutlives({
402+
let r_pred = type_outlives_predicate;
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+
PredicateAtom::Projection(projection_predicate) => PredicateAtom::Projection(
409+
if let Some((target_def_id, target_substs)) = self.translate_orig_substs(
410+
index_map,
411+
projection_predicate.projection_ty.item_def_id,
412+
projection_predicate.projection_ty.substs,
413+
) {
414+
ProjectionPredicate {
415+
projection_ty: ProjectionTy {
416+
substs: target_substs,
417+
item_def_id: target_def_id,
418+
},
419+
ty: self.translate(index_map, &projection_predicate.ty),
420+
}
421+
} else {
422+
return None;
423+
},
424+
)
425+
.to_predicate(self.tcx),
426+
PredicateAtom::WellFormed(ty) => {
427+
PredicateAtom::WellFormed(self.translate(index_map, &ty)).to_predicate(self.tcx)
431428
}
432-
PredicateKind::ObjectSafe(did) => {
433-
PredicateKind::ObjectSafe(self.translate_orig(*did)).to_predicate(self.tcx)
429+
PredicateAtom::ObjectSafe(did) => {
430+
PredicateAtom::ObjectSafe(self.translate_orig(did)).to_predicate(self.tcx)
434431
}
435-
PredicateKind::ClosureKind(did, substs, kind) => PredicateKind::ClosureKind(
436-
self.translate_orig(*did),
432+
PredicateAtom::ClosureKind(did, substs, kind) => PredicateAtom::ClosureKind(
433+
self.translate_orig(did),
437434
self.translate(index_map, &substs),
438-
*kind,
435+
kind,
439436
)
440437
.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) => {
438+
PredicateAtom::Subtype(subtype_predicate) => PredicateAtom::Subtype({
439+
let s_pred = subtype_predicate;
440+
let l = self.translate(index_map, &s_pred.a);
441+
let r = self.translate(index_map, &s_pred.b);
442+
SubtypePredicate {
443+
a_is_expected: s_pred.a_is_expected,
444+
a: l,
445+
b: r,
446+
}
447+
})
448+
.to_predicate(self.tcx),
449+
PredicateAtom::ConstEvaluatable(param, orig_substs) => {
454450
if let Some((target_def_id, target_substs)) =
455451
self.translate_orig_substs(index_map, param.did, orig_substs)
456452
{
457453
// TODO: We could probably use translated version for
458454
// `WithOptConstParam::const_param_did`
459455
let const_param = WithOptConstParam::unknown(target_def_id);
460-
PredicateKind::ConstEvaluatable(const_param, target_substs)
456+
PredicateAtom::ConstEvaluatable(const_param, target_substs)
461457
.to_predicate(self.tcx)
462458
} else {
463459
return None;
464460
}
465461
}
466-
PredicateKind::ConstEquate(c1, c2) => PredicateKind::ConstEquate(
462+
PredicateAtom::ConstEquate(c1, c2) => PredicateAtom::ConstEquate(
467463
self.translate(index_map, &c1),
468464
self.translate(index_map, &c2),
469465
)

src/traverse.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +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::PredicateAtom;
573574
use rustc_middle::ty::{ParamTy, PredicateKind, TyS};
574575

575576
debug!(
@@ -592,8 +593,8 @@ fn diff_traits<'tcx>(
592593
let old_param_env = tcx.param_env(old);
593594

594595
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;
596+
if let PredicateAtom::Trait(pred, _) = bound.skip_binders() {
597+
let trait_ref = pred.trait_ref;
597598

598599
debug!("trait_ref substs (old): {:?}", trait_ref.substs);
599600

src/typeck.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ 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, ToPredicate, TraitRef, Ty, TyCtxt,
2222
},
2323
};
2424
use rustc_trait_selection::traits::FulfillmentContext;
@@ -73,12 +73,13 @@ impl<'a, 'tcx> BoundContext<'a, 'tcx> {
7373
/// Register the trait bound represented by a `TraitRef`.
7474
pub fn register_trait_ref(&mut self, checked_trait_ref: TraitRef<'tcx>) {
7575
use rustc_hir::Constness;
76-
use rustc_middle::ty::{Binder, TraitPredicate};
76+
use rustc_middle::ty::PredicateAtom;
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
)
8485
.to_predicate(self.infcx.tcx);

0 commit comments

Comments
 (0)