diff options
| author | b-naber <bn263@gmx.de> | 2021-11-05 18:11:08 +0100 |
|---|---|---|
| committer | b-naber <bn263@gmx.de> | 2021-11-05 18:40:26 +0100 |
| commit | dae24073687fca6682c351379d41d61397e7c329 (patch) | |
| tree | 456c3f91eb2f143aef1c149a9c30afe248ab6435 | |
| parent | 6000b4844a954879df51dafe95dc88239cb485a5 (diff) | |
| download | rust-dae24073687fca6682c351379d41d61397e7c329.tar.gz rust-dae24073687fca6682c351379d41d61397e7c329.zip | |
resolve variables before erasing lifetimes
| -rw-r--r-- | compiler/rustc_infer/src/infer/mod.rs | 9 |
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 |
