@@ -234,39 +234,30 @@ pub fn report_selection_error<'a, 'tcx>(infcx: &InferCtxt<'a, 'tcx>,
234
234
if let Some ( s) = custom_note {
235
235
err. fileline_note ( obligation. cause . span , & s) ;
236
236
} else {
237
- infcx. tcx . populate_implementations_for_trait_if_necessary (
238
- trait_ref. def_id ( ) ) ;
239
-
237
+ let simp = fast_reject:: simplify_type ( infcx. tcx ,
238
+ trait_ref. self_ty ( ) ,
239
+ true ) ;
240
+ let mut impl_candidates = Vec :: new ( ) ;
240
241
let trait_def = infcx. tcx . lookup_trait_def ( trait_ref. def_id ( ) ) ;
241
- let blanket_impls = trait_def. blanket_impls . borrow ( ) ;
242
- let impl_iter = blanket_impls. iter ( )
243
- . filter_map ( |& id|
244
- infcx. tcx . impl_trait_ref ( id) ) ;
245
-
246
- let nonblanket = trait_def. nonblanket_impls . borrow ( ) ;
247
- let nonblanket_iter = nonblanket. values ( )
248
- . flat_map ( |ids|
249
- ids. iter ( ) . filter_map ( |& id|
250
- infcx. tcx . impl_trait_ref ( id) ) ) ;
251
-
252
- let simp = fast_reject:: simplify_type ( infcx. tcx , trait_ref. self_ty ( ) , true ) ;
253
- let nonblanket_iter = nonblanket_iter. filter ( |def| {
242
+
243
+ trait_def. for_each_impl ( infcx. tcx , |def_id| {
244
+ let imp = infcx. tcx . impl_trait_ref ( def_id) . unwrap ( ) ;
254
245
if let Some ( simp) = simp {
255
- let imp_simp = fast_reject:: simplify_type ( infcx. tcx , def. self_ty ( ) , true ) ;
246
+ let imp_simp = fast_reject:: simplify_type ( infcx. tcx ,
247
+ imp. self_ty ( ) ,
248
+ true ) ;
256
249
if let Some ( imp_simp) = imp_simp {
257
- simp == imp_simp
250
+ if simp == imp_simp {
251
+ impl_candidates. push ( imp) ;
252
+ }
258
253
} else {
259
- false
254
+ impl_candidates . push ( imp ) ;
260
255
}
261
256
} else {
262
- true
257
+ impl_candidates . push ( imp ) ;
263
258
}
264
259
} ) ;
265
260
266
- let impl_candidates = impl_iter. chain ( nonblanket_iter)
267
- . map ( |imp| format ! ( " {}" , imp) )
268
- . take ( 5 ) . collect :: < Vec < _ > > ( ) ;
269
-
270
261
if impl_candidates. len ( ) > 0 {
271
262
err. fileline_help (
272
263
obligation. cause . span ,
0 commit comments