@@ -328,52 +328,25 @@ fn do_normalize_predicates<'tcx>(
328328 . with_next_trait_solver ( true )
329329 . ignoring_regions ( )
330330 . build ( TypingMode :: non_body_analysis ( ) ) ;
331- let predicates_by_next: Vec < Option < _ > > = original_predicates
332- . iter ( )
333- . cloned ( )
334- . map ( |p| {
335- crate :: solve:: deeply_normalize :: < _ , ScrubbedTraitError < ' tcx > > (
331+ for ( orig_pred, pred_by_old) in original_predicates. into_iter ( ) . zip ( & predicates) {
332+ let inconsistent_pred_by_next =
333+ match crate :: solve:: deeply_normalize :: < _ , ScrubbedTraitError < ' tcx > > (
336334 infcx. at ( & cause, elaborated_env) ,
337- p,
338- )
339- . ok ( )
340- } )
341- . collect ( ) ;
342-
343- let errors = infcx. resolve_regions ( cause. body_id , elaborated_env, [ ] ) ;
344- if !errors. is_empty ( ) {
345- tcx. dcx ( ) . span_delayed_bug (
346- span,
347- format ! (
348- "failed region resolution while normalizing {elaborated_env:?}: {errors:?}"
349- ) ,
350- ) ;
351- }
352-
353- let predicates_by_next = match infcx. fully_resolve ( predicates_by_next) {
354- Ok ( predicates) => predicates,
355- Err ( fixup_err) => {
356- span_bug ! (
357- span,
358- "inference variables in normalized parameter environment: {}" ,
359- fixup_err
360- ) ;
361- }
362- } ;
363-
364- for ( ( orig_pred, old_pred) , next_pred) in
365- original_predicates. iter ( ) . zip ( & predicates) . zip ( & predicates_by_next)
366- {
367- if let Some ( next_pred) = next_pred
368- && next_pred == old_pred
369- {
370- continue ;
371- }
335+ orig_pred,
336+ ) {
337+ Ok ( pred_by_next) => {
338+ if pred_by_next == * pred_by_old {
339+ continue ;
340+ }
341+ Some ( pred_by_next)
342+ }
343+ Err ( _) => None ,
344+ } ;
372345 tcx. dcx ( ) . span_err (
373346 span,
374347 format ! (
375348 "inconsistency during normalizing env `{:#?}`, old={:#?}, next={:#?}" ,
376- orig_pred, old_pred , next_pred
349+ orig_pred, pred_by_old , inconsistent_pred_by_next
377350 ) ,
378351 ) ;
379352 }
0 commit comments