diff --git a/src/librustc/traits/project.rs b/src/librustc/traits/project.rs index 1778a8d693a83..1cf92d5a78669 100644 --- a/src/librustc/traits/project.rs +++ b/src/librustc/traits/project.rs @@ -142,8 +142,11 @@ impl<'tcx> ProjectionTyCandidateSet<'tcx> { true } Single(current) => { - // No duplicates are expected. - assert_ne!(current, &candidate); + // Duplicates can happen inside ParamEnv. In the case, we + // perform a lazy deduplication. + if current == &candidate { + return false; + } // Prefer where-clauses. As in select, if there are multiple // candidates, we prefer where-clause candidates over impls. This // may seem a bit surprising, since impls are the source of