]> git.lizzy.rs Git - rust.git/commitdiff
Consider all implementations of Generator, not just built in ones
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Thu, 6 Jul 2017 22:02:35 +0000 (00:02 +0200)
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Fri, 28 Jul 2017 13:46:23 +0000 (15:46 +0200)
src/librustc/traits/select.rs

index 887edc5036490ffb2561222fb58df34249a5184c..3fcd79f706b789c7621cd87b09e61963f0c027f4 100644 (file)
@@ -1305,9 +1305,8 @@ fn assemble_candidates<'o>(&mut self,
                                                    &mut candidates)?;
          } else if self.tcx().lang_items.unsize_trait() == Some(def_id) {
              self.assemble_candidates_for_unsizing(obligation, &mut candidates);
-         } else if self.tcx().lang_items.gen_trait() == Some(def_id) {
-             self.assemble_generator_candidates(obligation, &mut candidates)?;
          } else {
+             self.assemble_generator_candidates(obligation, &mut candidates)?;
              self.assemble_closure_candidates(obligation, &mut candidates)?;
              self.assemble_fn_pointer_candidates(obligation, &mut candidates)?;
              self.assemble_candidates_from_impls(obligation, &mut candidates)?;
@@ -1497,6 +1496,10 @@ fn assemble_generator_candidates(&mut self,
                                    candidates: &mut SelectionCandidateSet<'tcx>)
                                    -> Result<(),SelectionError<'tcx>>
     {
+        if self.tcx().lang_items.gen_trait() != Some(obligation.predicate.def_id()) {
+            return Ok(());
+        }
+
         let self_ty = *obligation.self_ty().skip_binder();
         let (closure_def_id, substs) = match self_ty.sty {
             ty::TyGenerator(id, substs, _) => (id, substs),