@@ -207,6 +207,10 @@ pub fn normalize_param_env_or_error<'tcx>(
207207 unnormalized_env : ty:: ParamEnv < ' tcx > ,
208208 cause : ObligationCause < ' tcx > ,
209209) -> ty:: ParamEnv < ' tcx > {
210+ if tcx. next_trait_solver_globally ( ) {
211+ return unnormalized_env;
212+ }
213+
210214 // I'm not wild about reporting errors here; I'd prefer to
211215 // have the errors get reported at a defined place (e.g.,
212216 // during typeck). Instead I have all parameter
@@ -221,9 +225,10 @@ pub fn normalize_param_env_or_error<'tcx>(
221225 // parameter environments once for every fn as it goes,
222226 // and errors will get reported then; so outside of type inference we
223227 // can be sure that no errors should occur.
224- let mut predicates: Vec < _ > = util:: elaborate (
225- tcx,
226- unnormalized_env. caller_bounds ( ) . into_iter ( ) . map ( |predicate| {
228+ let mut predicates: Vec < _ > = unnormalized_env
229+ . caller_bounds ( )
230+ . into_iter ( )
231+ . map ( |predicate| {
227232 if tcx. features ( ) . generic_const_exprs {
228233 return predicate;
229234 }
@@ -280,13 +285,13 @@ pub fn normalize_param_env_or_error<'tcx>(
280285 //
281286 // FIXME(-Znext-solver): remove this hack since we have deferred projection equality
282287 predicate. fold_with ( & mut ConstNormalizer ( tcx) )
283- } ) ,
284- )
285- . collect ( ) ;
288+ } )
289+ . collect ( ) ;
286290
287291 debug ! ( "normalize_param_env_or_error: elaborated-predicates={:?}" , predicates) ;
288292
289- let elaborated_env = ty:: ParamEnv :: new ( tcx. mk_clauses ( & predicates) , unnormalized_env. reveal ( ) ) ;
293+ let reveal = unnormalized_env. reveal ( ) ;
294+ let eager_evaluated_env = ty:: ParamEnv :: new ( tcx. mk_clauses ( & predicates) , reveal) ;
290295
291296 // HACK: we are trying to normalize the param-env inside *itself*. The problem is that
292297 // normalization expects its param-env to be already normalized, which means we have
@@ -317,11 +322,11 @@ pub fn normalize_param_env_or_error<'tcx>(
317322 predicates, outlives_predicates
318323 ) ;
319324 let Ok ( non_outlives_predicates) =
320- do_normalize_predicates ( tcx, cause. clone ( ) , elaborated_env , predicates)
325+ do_normalize_predicates ( tcx, cause. clone ( ) , eager_evaluated_env , predicates)
321326 else {
322327 // An unnormalized env is better than nothing.
323328 debug ! ( "normalize_param_env_or_error: errored resolving non-outlives predicates" ) ;
324- return elaborated_env ;
329+ return eager_evaluated_env ;
325330 } ;
326331
327332 debug ! ( "normalize_param_env_or_error: non-outlives predicates={:?}" , non_outlives_predicates) ;
@@ -330,21 +335,20 @@ pub fn normalize_param_env_or_error<'tcx>(
330335 // here. I believe they should not matter, because we are ignoring TypeOutlives param-env
331336 // predicates here anyway. Keeping them here anyway because it seems safer.
332337 let outlives_env = non_outlives_predicates. iter ( ) . chain ( & outlives_predicates) . cloned ( ) ;
333- let outlives_env =
334- ty:: ParamEnv :: new ( tcx. mk_clauses_from_iter ( outlives_env) , unnormalized_env. reveal ( ) ) ;
338+ let outlives_env = ty:: ParamEnv :: new ( tcx. mk_clauses_from_iter ( outlives_env) , reveal) ;
335339 let Ok ( outlives_predicates) =
336340 do_normalize_predicates ( tcx, cause, outlives_env, outlives_predicates)
337341 else {
338342 // An unnormalized env is better than nothing.
339343 debug ! ( "normalize_param_env_or_error: errored resolving outlives predicates" ) ;
340- return elaborated_env ;
344+ return eager_evaluated_env ;
341345 } ;
342346 debug ! ( "normalize_param_env_or_error: outlives predicates={:?}" , outlives_predicates) ;
343347
344348 let mut predicates = non_outlives_predicates;
345349 predicates. extend ( outlives_predicates) ;
346350 debug ! ( "normalize_param_env_or_error: final predicates={:?}" , predicates) ;
347- ty:: ParamEnv :: new ( tcx. mk_clauses ( & predicates) , unnormalized_env . reveal ( ) )
351+ ty:: ParamEnv :: new ( tcx. mk_clauses ( & predicates) , reveal)
348352}
349353
350354/// Normalize a type and process all resulting obligations, returning any errors.
0 commit comments