Skip to content

Commit 488dccb

Browse files
committed
Elaborate trait obligations when typechecking impls
Fixes #43784.
1 parent 1ebc7ef commit 488dccb

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/librustc/ty/wf.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,20 +137,19 @@ impl<'a, 'gcx, 'tcx> WfPredicates<'a, 'gcx, 'tcx> {
137137
/// `self.out`.
138138
fn compute_trait_ref(&mut self, trait_ref: &ty::TraitRef<'tcx>) {
139139
let obligations = self.nominal_obligations(trait_ref.def_id, trait_ref.substs);
140-
self.out.extend(obligations);
141140

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

145-
let implied_obligations = traits::elaborate_predicates(self.infcx.tcx, vec![
146-
ty::Predicate::Trait(ty::Binder(
147-
ty::TraitPredicate { trait_ref: *trait_ref }
148-
))
149-
]);
144+
let predicates = obligations.iter()
145+
.map(|obligation| obligation.predicate.clone())
146+
.collect();
147+
let implied_obligations = traits::elaborate_predicates(self.infcx.tcx, predicates);
150148
let implied_obligations = implied_obligations.map(|pred| {
151149
traits::Obligation::new(cause.clone(), param_env, pred)
152150
});
153-
self.out.extend(implied_obligations);
151+
152+
self.out.extend(implied_obligations.chain(obligations));
154153

155154
self.out.extend(
156155
trait_ref.substs.types()

0 commit comments

Comments
 (0)