};
e.print_backtrace();
if let Some(frame) = ecx.stack().last() {
- let block = &frame.body.basic_blocks()[frame.block];
+ let block = &frame.body.basic_blocks()[frame.block.unwrap()];
let span = if frame.stmt < block.statements.len() {
block.statements[frame.stmt].source_info.span
} else {
args: &[OpTy<'tcx, Tag>],
dest: Option<PlaceTy<'tcx, Tag>>,
ret: Option<mir::BasicBlock>,
+ _unwind: Option<mir::BasicBlock>,
) -> InterpResult<'tcx, Option<&'mir mir::Body<'tcx>>> {
ecx.find_fn(instance, args, dest, ret)
}
span: Span,
instance: ty::Instance<'tcx>,
args: &[OpTy<'tcx, Tag>],
- dest: PlaceTy<'tcx, Tag>,
+ dest: Option<PlaceTy<'tcx, Tag>>,
+ _ret: Option<mir::BasicBlock>,
+ _unwind: Option<mir::BasicBlock>
) -> InterpResult<'tcx> {
+ let dest = match dest {
+ Some(dest) => dest,
+ None => throw_ub!(Unreachable)
+ };
ecx.call_intrinsic(span, instance, args, dest)
}
fn stack_pop(
ecx: &mut InterpCx<'mir, 'tcx, Self>,
extra: stacked_borrows::CallId,
- ) -> InterpResult<'tcx> {
- Ok(ecx
+ _unwinding: bool
+ ) -> InterpResult<'tcx, StackPopInfo> {
+ ecx
.memory
.extra
.stacked_borrows
.borrow_mut()
- .end_call(extra))
+ .end_call(extra);
+ Ok(StackPopInfo::Normal)
}
#[inline(always)]
dest: PlaceTy<'tcx, Tag>,
) -> InterpResult<'tcx> {
let this = self.eval_context_mut();
- if this.emulate_intrinsic(span, instance, args, dest)? {
+ if this.emulate_intrinsic(span, instance, args, Some(dest))? {
return Ok(());
}
let tcx = &{this.tcx.tcx};