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);
}
}
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) => {
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 } => {