diff options
| author | Matthew Jasper <mjjasper1@gmail.com> | 2019-12-09 22:19:40 +0000 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2019-12-20 20:14:11 +0000 |
| commit | 0a5c91c1293bcc0ece70c9bde849eb619fd6a64f (patch) | |
| tree | 2b04fcd4a9eb6d272cbcc786d5381d5b711e7502 | |
| parent | cd3ead19dd37c829d22af947d510d8efa73cdb70 (diff) | |
| download | rust-0a5c91c1293bcc0ece70c9bde849eb619fd6a64f.tar.gz rust-0a5c91c1293bcc0ece70c9bde849eb619fd6a64f.zip | |
Generate correct `Deref` predicate
| -rw-r--r-- | src/librustc_typeck/check/demand.rs | 10 |
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, }, |
