about summary refs log tree commit diff
diff options
context:
space:
mode:
authorscalexm <martin.alex32@hotmail.fr>2017-08-10 14:41:24 +0200
committerscalexm <martin.alex32@hotmail.fr>2017-08-10 14:41:24 +0200
commit1ebc7eff46fb01c625ecce55a0537dcc78e58756 (patch)
tree65bf875401c6dfcfcda9098679c32059e2f65e16
parentc2de81f4c97c8d1af685162f5a6faf8c89f6cd83 (diff)
downloadrust-1ebc7eff46fb01c625ecce55a0537dcc78e58756.tar.gz
rust-1ebc7eff46fb01c625ecce55a0537dcc78e58756.zip
Fix for the supertrait example in #43784
-rw-r--r--src/librustc/ty/wf.rs11
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())