]> git.lizzy.rs Git - rust.git/commitdiff
Skip checking for Storage* statements in constants/statics
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 22 Mar 2018 15:59:02 +0000 (16:59 +0100)
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 22 Mar 2018 15:59:02 +0000 (16:59 +0100)
src/librustc_mir/interpret/eval_context.rs

index ee8419404ca47528e850ff36ce3e616c06e29269..376c7f240583ca6de36c8680a99ad026cb3b9904 100644 (file)
@@ -1,6 +1,7 @@
 use std::fmt::Write;
 
 use rustc::hir::def_id::DefId;
+use rustc::hir::def::Def;
 use rustc::hir::map::definitions::DefPathData;
 use rustc::middle::const_val::{ConstVal, ErrKind};
 use rustc::mir;
@@ -387,17 +388,23 @@ pub fn push_stack_frame(
         let num_locals = mir.local_decls.len() - 1;
 
         let mut locals = vec![Some(Value::ByVal(PrimVal::Undef)); num_locals];
-        trace!("push_stack_frame: {:?}: num_bbs: {}", span, mir.basic_blocks().len());
-        for block in mir.basic_blocks() {
-            for stmt in block.statements.iter() {
-                use rustc::mir::StatementKind::{StorageDead, StorageLive};
-                match stmt.kind {
-                    StorageLive(local) | StorageDead(local) => if local.index() > 0 {
-                        locals[local.index() - 1] = None;
-                    },
-                    _ => {}
+        match self.tcx.describe_def(instance.def_id()) {
+            // statics and constants don't have `Storage*` statements, no need to look for them
+            Some(Def::Static(..)) | Some(Def::Const(..)) | Some(Def::AssociatedConst(..)) => {},
+            _ => {
+                trace!("push_stack_frame: {:?}: num_bbs: {}", span, mir.basic_blocks().len());
+                for block in mir.basic_blocks() {
+                    for stmt in block.statements.iter() {
+                        use rustc::mir::StatementKind::{StorageDead, StorageLive};
+                        match stmt.kind {
+                            StorageLive(local) | StorageDead(local) => if local.index() > 0 {
+                                locals[local.index() - 1] = None;
+                            },
+                            _ => {}
+                        }
+                    }
                 }
-            }
+            },
         }
 
         self.stack.push(Frame {