From a524a9af918df6a6d3abd68a642e89f0d34b36f5 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sat, 4 Apr 2020 15:53:47 +0200 Subject: [PATCH] Miri terminator handling: only do progress sanity check for 'Call' terminator --- src/librustc_mir/interpret/step.rs | 5 ----- src/librustc_mir/interpret/terminator.rs | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/librustc_mir/interpret/step.rs b/src/librustc_mir/interpret/step.rs index 407849c2ce2..2dd732e41ee 100644 --- a/src/librustc_mir/interpret/step.rs +++ b/src/librustc_mir/interpret/step.rs @@ -279,13 +279,8 @@ fn terminator(&mut self, terminator: &mir::Terminator<'tcx>) -> InterpResult<'tc self.tcx.span = terminator.source_info.span; self.memory.tcx.span = terminator.source_info.span; - let old_stack = self.cur_frame(); - let old_bb = self.frame().block; - self.eval_terminator(terminator)?; if !self.stack.is_empty() { - // This should change *something* - assert!(self.cur_frame() != old_stack || self.frame().block != old_bb); if let Some(block) = self.frame().block { info!("// executing {:?}", block); } diff --git a/src/librustc_mir/interpret/terminator.rs b/src/librustc_mir/interpret/terminator.rs index 6ebe5b80370..161fbdc9ed4 100644 --- a/src/librustc_mir/interpret/terminator.rs +++ b/src/librustc_mir/interpret/terminator.rs @@ -52,6 +52,8 @@ pub(super) fn eval_terminator( } Call { ref func, ref args, destination, ref cleanup, .. } => { + let old_stack = self.cur_frame(); + let old_bb = self.frame().block; let func = self.eval_operand(func, None)?; let (fn_val, abi) = match func.layout.ty.kind { ty::FnPtr(sig) => { @@ -72,6 +74,9 @@ pub(super) fn eval_terminator( None => None, }; self.eval_fn_call(fn_val, abi, &args[..], ret, *cleanup)?; + // Sanity-check that `eval_fn_call` either pushed a new frame or + // did a jump to another block. + assert!(self.cur_frame() != old_stack || self.frame().block != old_bb); } Drop { location, target, unwind } => {