about summary refs log tree commit diff
diff options
context:
space:
mode:
authorb-naber <bn263@gmx.de>2021-11-05 18:11:08 +0100
committerb-naber <bn263@gmx.de>2021-11-05 18:40:26 +0100
commitdae24073687fca6682c351379d41d61397e7c329 (patch)
tree456c3f91eb2f143aef1c149a9c30afe248ab6435
parent6000b4844a954879df51dafe95dc88239cb485a5 (diff)
downloadrust-dae24073687fca6682c351379d41d61397e7c329.tar.gz
rust-dae24073687fca6682c351379d41d61397e7c329.zip
resolve variables before erasing lifetimes
-rw-r--r--compiler/rustc_infer/src/infer/mod.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler/rustc_infer/src/infer/mod.rs b/compiler/rustc_infer/src/infer/mod.rs
index 4873d3a6421..5e687a7063c 100644
--- a/compiler/rustc_infer/src/infer/mod.rs
+++ b/compiler/rustc_infer/src/infer/mod.rs
@@ -1585,9 +1585,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
         unevaluated: ty::Unevaluated<'tcx>,
         span: Option<Span>,
     ) -> EvalToConstValueResult<'tcx> {
-        let param_env = self.tcx.erase_regions(param_env);
         let mut substs = unevaluated.substs(self.tcx);
-        substs = self.tcx.erase_regions(substs);
         substs = self.resolve_vars_if_possible(substs);
 
         // Postpone the evaluation of constants whose substs depend on inference
@@ -1596,15 +1594,18 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
             return Err(ErrorHandled::TooGeneric);
         }
 
+        let param_env_erased = self.tcx.erase_regions(param_env);
+        let substs_erased = self.tcx.erase_regions(substs);
+
         let unevaluated = ty::Unevaluated {
             def: unevaluated.def,
-            substs_: Some(substs),
+            substs_: Some(substs_erased),
             promoted: unevaluated.promoted,
         };
 
         // The return value is the evaluated value which doesn't contain any reference to inference
         // variables, thus we don't need to substitute back the original values.
-        self.tcx.const_eval_resolve(param_env, unevaluated, span)
+        self.tcx.const_eval_resolve(param_env_erased, unevaluated, span)
     }
 
     /// If `typ` is a type variable of some kind, resolve it one level