about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Jasper <mjjasper1@gmail.com>2019-12-09 22:19:40 +0000
committerMatthew Jasper <mjjasper1@gmail.com>2019-12-20 20:14:11 +0000
commit0a5c91c1293bcc0ece70c9bde849eb619fd6a64f (patch)
tree2b04fcd4a9eb6d272cbcc786d5381d5b711e7502
parentcd3ead19dd37c829d22af947d510d8efa73cdb70 (diff)
downloadrust-0a5c91c1293bcc0ece70c9bde849eb619fd6a64f.tar.gz
rust-0a5c91c1293bcc0ece70c9bde849eb619fd6a64f.zip
Generate correct `Deref` predicate
-rw-r--r--src/librustc_typeck/check/demand.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs
index 16a55d2a4d3..7d845b872ff 100644
--- a/src/librustc_typeck/check/demand.rs
+++ b/src/librustc_typeck/check/demand.rs
@@ -551,15 +551,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                 // Check for `Deref` implementations by constructing a predicate to
                 // prove: `<T as Deref>::Output == U`
                 let deref_trait = self.tcx.lang_items().deref_trait().unwrap();
-                let item_def_id = self.tcx.associated_items(deref_trait).next().unwrap().def_id;
+                let item_def_id = self.tcx.associated_items(deref_trait)
+                    .find(|item| item.kind == ty::AssocKind::Type)
+                    .unwrap()
+                    .def_id;
                 let predicate = ty::Predicate::Projection(ty::Binder::bind(ty::ProjectionPredicate {
                     // `<T as Deref>::Output`
                     projection_ty: ty::ProjectionTy {
                         // `T`
-                        substs: self.tcx.mk_substs_trait(
-                            checked_ty,
-                            self.fresh_substs_for_item(sp, item_def_id),
-                        ),
+                        substs: self.tcx.intern_substs(&[checked_ty.into()]),
                         // `Deref::Output`
                         item_def_id,
                     },