about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-09-05 12:11:17 +0200
committerGitHub <noreply@github.com>2019-09-05 12:11:17 +0200
commit23265741d33b9baff5ae0c50b328ccd54a3c1b47 (patch)
tree28b673732d2874d3541d2a3b6f33beebb84437c1
parent59237ec66526101e895f6b3430be780aa44c9d9d (diff)
parent46877e289087c67d03572019fca9792d95e55e0c (diff)
downloadrust-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.rs5
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),