Skip to content

Commit

Permalink
Elaborate trait obligations when typechecking impls
Browse files Browse the repository at this point in the history
  • Loading branch information
scalexm committed Aug 10, 2017
1 parent 1ebc7ef commit 488dccb
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions src/librustc/ty/wf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,20 +137,19 @@ impl<'a, 'gcx, 'tcx> WfPredicates<'a, 'gcx, 'tcx> {
/// `self.out`.
fn compute_trait_ref(&mut self, trait_ref: &ty::TraitRef<'tcx>) {
let obligations = self.nominal_obligations(trait_ref.def_id, trait_ref.substs);
self.out.extend(obligations);

let cause = self.cause(traits::MiscObligation);
let param_env = self.param_env;

let implied_obligations = traits::elaborate_predicates(self.infcx.tcx, vec![
ty::Predicate::Trait(ty::Binder(
ty::TraitPredicate { trait_ref: *trait_ref }
))
]);
let predicates = obligations.iter()
.map(|obligation| obligation.predicate.clone())
.collect();
let implied_obligations = traits::elaborate_predicates(self.infcx.tcx, predicates);
let implied_obligations = implied_obligations.map(|pred| {
traits::Obligation::new(cause.clone(), param_env, pred)
});
self.out.extend(implied_obligations);

self.out.extend(implied_obligations.chain(obligations));

self.out.extend(
trait_ref.substs.types()
Expand Down

0 comments on commit 488dccb

Please sign in to comment.