@@ -182,25 +182,13 @@ pub(crate) fn type_check<'mir, 'tcx>(
182182            let  mut  opaque_type_values = cx. opaque_type_values ; 
183183
184184            for  ( _,  revealed_ty)  in  & mut  opaque_type_values { 
185-                 // FIXME(oli-obk): Instead of looping, implement a visitor like 
186-                 // FullTypeResolver. We can't use FullTypeResolver here, as that will 
187-                 // resolve lifetimes lexically, which it can't because we didn't do old 
188-                 // borrowck stuff. We want to use MIR borrowck information instead. 
189- 
190-                 while  revealed_ty. has_infer_types_or_consts ( )  { 
191-                     let  prev = * revealed_ty; 
192-                     trace ! ( prev=?prev. kind( ) ) ; 
193-                     let  type_resolved = infcx. shallow_resolve ( prev) ; 
194-                     trace ! ( type_resolved=?type_resolved. kind( ) ) ; 
195-                     if  prev == type_resolved { 
196-                         infcx. tcx . sess . delay_span_bug ( 
197-                             body. span , 
198-                             & format ! ( "could not resolve {:#?}" ,  type_resolved. kind( ) ) , 
199-                         ) ; 
200-                         * revealed_ty = infcx. tcx . ty_error ( ) ; 
201-                         break ; 
202-                     } 
203-                     * revealed_ty = type_resolved; 
185+                 * revealed_ty = infcx. resolve_vars_if_possible ( * revealed_ty) ; 
186+                 if  revealed_ty. has_infer_types_or_consts ( )  { 
187+                     infcx. tcx . sess . delay_span_bug ( 
188+                         body. span , 
189+                         & format ! ( "could not resolve {:#?}" ,  revealed_ty. kind( ) ) , 
190+                     ) ; 
191+                     * revealed_ty = infcx. tcx . ty_error ( ) ; 
204192                } 
205193            } 
206194
0 commit comments