@@ -2,7 +2,7 @@ use rustc_infer::infer::TyCtxtInferExt;
2
2
use rustc_middle:: traits:: query:: NoSolution ;
3
3
use rustc_middle:: ty:: query:: Providers ;
4
4
use rustc_middle:: ty:: subst:: GenericArg ;
5
- use rustc_middle:: ty:: { self , ParamEnvAnd , TyCtxt } ;
5
+ use rustc_middle:: ty:: { self , ParamEnvAnd , TyCtxt , TypeFoldable } ;
6
6
use rustc_trait_selection:: traits:: query:: normalize:: AtExt ;
7
7
use rustc_trait_selection:: traits:: { Normalized , ObligationCause } ;
8
8
use std:: sync:: atomic:: Ordering ;
@@ -31,8 +31,14 @@ fn normalize_generic_arg_after_erasing_regions<'tcx>(
31
31
None ,
32
32
) ;
33
33
34
- let normalized_value = infcx. resolve_vars_if_possible ( normalized_value) ;
35
- infcx. tcx . erase_regions ( normalized_value)
34
+ let resolved_value = infcx. resolve_vars_if_possible ( normalized_value) ;
35
+ // It's unclear when `resolve_vars` would have an effect in a
36
+ // fresh `InferCtxt`. If this assert does trigger, it will give
37
+ // us a test case.
38
+ debug_assert_eq ! ( normalized_value, resolved_value) ;
39
+ let erased = infcx. tcx . erase_regions ( resolved_value) ;
40
+ debug_assert ! ( !erased. needs_infer( ) , "{:?}" , erased) ;
41
+ erased
36
42
}
37
43
Err ( NoSolution ) => bug ! ( "could not fully normalize `{:?}`" , value) ,
38
44
}
0 commit comments