diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-09-05 12:11:17 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-05 12:11:17 +0200 |
| commit | 23265741d33b9baff5ae0c50b328ccd54a3c1b47 (patch) | |
| tree | 28b673732d2874d3541d2a3b6f33beebb84437c1 | |
| parent | 59237ec66526101e895f6b3430be780aa44c9d9d (diff) | |
| parent | 46877e289087c67d03572019fca9792d95e55e0c (diff) | |
| download | rust-23265741d33b9baff5ae0c50b328ccd54a3c1b47.tar.gz rust-23265741d33b9baff5ae0c50b328ccd54a3c1b47.zip | |
Rollup merge of #64100 - wesleywiser:fix_miri_const_eval, r=oli-obk
Fix const eval bug breaking run-pass tests in Miri PR #63580 broke miri's ability to run the run-pass test suite with MIR optimizations enabled. The issue was that we weren't properly handling the substs and DefId associated with a Promoted value. This didn't break anything in rustc because in rustc this code runs before the Inliner pass which is where the DefId and substs can diverge from their initial values. It broke Miri though because it ran this code again after running the optimization pass. r? @oli-obk cc @RalfJung
| -rw-r--r-- | src/librustc_mir/interpret/place.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/librustc_mir/interpret/place.rs b/src/librustc_mir/interpret/place.rs index 23c9e7fdf67..f358bb00f4d 100644 --- a/src/librustc_mir/interpret/place.rs +++ b/src/librustc_mir/interpret/place.rs @@ -585,8 +585,9 @@ where use rustc::mir::StaticKind; Ok(match place_static.kind { - StaticKind::Promoted(promoted, _) => { - let instance = self.frame().instance; + StaticKind::Promoted(promoted, promoted_substs) => { + let substs = self.subst_from_frame_and_normalize_erasing_regions(promoted_substs); + let instance = ty::Instance::new(place_static.def_id, substs); self.const_eval_raw(GlobalId { instance, promoted: Some(promoted), |
