@@ -170,44 +170,12 @@ where
170170        // collecting region constraints via `region_constraints`. 
171171        let  ( mut  output,  _)  = scrape_region_constraints ( 
172172            infcx, 
173-             |_ocx | { 
174-                 let  ( output,  ei,  mut   obligations,  _)  =
173+             |ocx | { 
174+                 let  ( output,  ei,  obligations,  _)  =
175175                    Q :: fully_perform_into ( self ,  infcx,  & mut  region_constraints,  span) ?; 
176176                error_info = ei; 
177177
178-                 // Typically, instantiating NLL query results does not 
179-                 // create obligations. However, in some cases there 
180-                 // are unresolved type variables, and unify them *can* 
181-                 // create obligations. In that case, we have to go 
182-                 // fulfill them. We do this via a (recursive) query. 
183-                 while  !obligations. is_empty ( )  { 
184-                     trace ! ( "{:#?}" ,  obligations) ; 
185-                     let  mut  progress = false ; 
186-                     for  obligation in  std:: mem:: take ( & mut  obligations)  { 
187-                         let  obligation = infcx. resolve_vars_if_possible ( obligation) ; 
188-                         match  ProvePredicate :: fully_perform_into ( 
189-                             obligation. param_env . and ( ProvePredicate :: new ( obligation. predicate ) ) , 
190-                             infcx, 
191-                             & mut  region_constraints, 
192-                             span, 
193-                         )  { 
194-                             Ok ( ( ( ) ,  _,  new,  certainty) )  => { 
195-                                 obligations. extend ( new) ; 
196-                                 progress = true ; 
197-                                 if  let  Certainty :: Ambiguous  = certainty { 
198-                                     obligations. push ( obligation) ; 
199-                                 } 
200-                             } 
201-                             Err ( _)  => obligations. push ( obligation) , 
202-                         } 
203-                     } 
204-                     if  !progress { 
205-                         infcx. dcx ( ) . span_bug ( 
206-                             span, 
207-                             format ! ( "ambiguity processing {obligations:?} from {self:?}" ) , 
208-                         ) ; 
209-                     } 
210-                 } 
178+                 ocx. register_obligations ( obligations) ; 
211179                Ok ( output) 
212180            } , 
213181            "fully_perform" , 
0 commit comments