diff --git a/src/librustc_mir/interpret/terminator.rs b/src/librustc_mir/interpret/terminator.rs index f1e1c98e44eb..4f9e404b2c63 100644 --- a/src/librustc_mir/interpret/terminator.rs +++ b/src/librustc_mir/interpret/terminator.rs @@ -265,6 +265,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { match instance.def { ty::InstanceDef::Intrinsic(..) => { let old_stack = self.cur_frame(); + let old_bb = self.frame().block; M::call_intrinsic(self, span, instance, args, dest, ret, unwind)?; // No stack frame gets pushed, the main loop will just act as if the // call completed. @@ -275,7 +276,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { // then the intrinsic implementation should have // changed the stack frame (otherwise, we'll end // up trying to execute this intrinsic call again) - assert!(self.cur_frame() != old_stack); + debug_assert!(self.cur_frame() != old_stack || self.frame().block != old_bb); } if let Some(dest) = dest { self.dump_place(*dest)