mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-31 13:40:15 +03:00
Rustup for panic changes
This gets Miri working again, but doesn't actually implement unwinding
This commit is contained in:
+1
-1
@@ -213,7 +213,7 @@ pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) {
|
||||
};
|
||||
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 {
|
||||
|
||||
+13
-4
@@ -173,6 +173,7 @@ fn find_fn(
|
||||
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)
|
||||
}
|
||||
@@ -194,8 +195,14 @@ fn call_intrinsic(
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -353,13 +360,15 @@ fn stack_push(
|
||||
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)]
|
||||
|
||||
@@ -335,7 +335,7 @@ fn emulate_foreign_item(
|
||||
mir,
|
||||
Some(ret_place),
|
||||
// Directly return to caller.
|
||||
StackPopCleanup::Goto(Some(ret)),
|
||||
StackPopCleanup::Goto { ret: Some(ret), unwind: None },
|
||||
)?;
|
||||
let mut args = this.frame().body.args_iter();
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ fn call_intrinsic(
|
||||
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};
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ fn find_fn(
|
||||
);
|
||||
|
||||
// First, run the common hooks also supported by CTFE.
|
||||
if this.hook_fn(instance, args, dest)? {
|
||||
if this.hook_panic_fn(instance, args, dest)? {
|
||||
this.goto_block(ret)?;
|
||||
return Ok(None);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user