@@ -207,6 +207,10 @@ pub fn normalize_param_env_or_error<'tcx>(
207
207
unnormalized_env : ty:: ParamEnv < ' tcx > ,
208
208
cause : ObligationCause < ' tcx > ,
209
209
) -> ty:: ParamEnv < ' tcx > {
210
+ if tcx. next_trait_solver_globally ( ) {
211
+ return unnormalized_env;
212
+ }
213
+
210
214
// I'm not wild about reporting errors here; I'd prefer to
211
215
// have the errors get reported at a defined place (e.g.,
212
216
// during typeck). Instead I have all parameter
@@ -221,9 +225,10 @@ pub fn normalize_param_env_or_error<'tcx>(
221
225
// parameter environments once for every fn as it goes,
222
226
// and errors will get reported then; so outside of type inference we
223
227
// 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| {
227
232
if tcx. features ( ) . generic_const_exprs {
228
233
return predicate;
229
234
}
@@ -280,13 +285,13 @@ pub fn normalize_param_env_or_error<'tcx>(
280
285
//
281
286
// FIXME(-Znext-solver): remove this hack since we have deferred projection equality
282
287
predicate. fold_with ( & mut ConstNormalizer ( tcx) )
283
- } ) ,
284
- )
285
- . collect ( ) ;
288
+ } )
289
+ . collect ( ) ;
286
290
287
291
debug ! ( "normalize_param_env_or_error: elaborated-predicates={:?}" , predicates) ;
288
292
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) ;
290
295
291
296
// HACK: we are trying to normalize the param-env inside *itself*. The problem is that
292
297
// 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>(
317
322
predicates, outlives_predicates
318
323
) ;
319
324
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)
321
326
else {
322
327
// An unnormalized env is better than nothing.
323
328
debug ! ( "normalize_param_env_or_error: errored resolving non-outlives predicates" ) ;
324
- return elaborated_env ;
329
+ return eager_evaluated_env ;
325
330
} ;
326
331
327
332
debug ! ( "normalize_param_env_or_error: non-outlives predicates={:?}" , non_outlives_predicates) ;
@@ -330,21 +335,20 @@ pub fn normalize_param_env_or_error<'tcx>(
330
335
// here. I believe they should not matter, because we are ignoring TypeOutlives param-env
331
336
// predicates here anyway. Keeping them here anyway because it seems safer.
332
337
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) ;
335
339
let Ok ( outlives_predicates) =
336
340
do_normalize_predicates ( tcx, cause, outlives_env, outlives_predicates)
337
341
else {
338
342
// An unnormalized env is better than nothing.
339
343
debug ! ( "normalize_param_env_or_error: errored resolving outlives predicates" ) ;
340
- return elaborated_env ;
344
+ return eager_evaluated_env ;
341
345
} ;
342
346
debug ! ( "normalize_param_env_or_error: outlives predicates={:?}" , outlives_predicates) ;
343
347
344
348
let mut predicates = non_outlives_predicates;
345
349
predicates. extend ( outlives_predicates) ;
346
350
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)
348
352
}
349
353
350
354
/// Normalize a type and process all resulting obligations, returning any errors.
0 commit comments