diff options
| author | scalexm <martin.alex32@hotmail.fr> | 2017-08-10 14:41:24 +0200 |
|---|---|---|
| committer | scalexm <martin.alex32@hotmail.fr> | 2017-08-10 14:41:24 +0200 |
| commit | 1ebc7eff46fb01c625ecce55a0537dcc78e58756 (patch) | |
| tree | 65bf875401c6dfcfcda9098679c32059e2f65e16 | |
| parent | c2de81f4c97c8d1af685162f5a6faf8c89f6cd83 (diff) | |
| download | rust-1ebc7eff46fb01c625ecce55a0537dcc78e58756.tar.gz rust-1ebc7eff46fb01c625ecce55a0537dcc78e58756.zip | |
Fix for the supertrait example in #43784
| -rw-r--r-- | src/librustc/ty/wf.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/librustc/ty/wf.rs b/src/librustc/ty/wf.rs index c24c583ad1e..580a3aec3e8 100644 --- a/src/librustc/ty/wf.rs +++ b/src/librustc/ty/wf.rs @@ -141,6 +141,17 @@ impl<'a, 'gcx, 'tcx> WfPredicates<'a, 'gcx, 'tcx> { 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 implied_obligations = implied_obligations.map(|pred| { + traits::Obligation::new(cause.clone(), param_env, pred) + }); + self.out.extend(implied_obligations); + self.out.extend( trait_ref.substs.types() .filter(|ty| !ty.has_escaping_regions()) |
