Use the machine stop error instead of abusing other error kinds
This commit is contained in:
parent
7cd0d7f152
commit
817f4159a2
2 changed files with 5 additions and 2 deletions
|
|
@ -33,6 +33,7 @@ pub struct MiriConfig {
|
|||
/// Details of premature program termination.
|
||||
pub enum TerminationInfo {
|
||||
Exit(i64),
|
||||
PoppedTrackedPointerTag(Item),
|
||||
Abort,
|
||||
}
|
||||
|
||||
|
|
@ -218,6 +219,8 @@ pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) ->
|
|||
.expect("invalid MachineStop payload");
|
||||
match info {
|
||||
TerminationInfo::Exit(code) => return Some(*code),
|
||||
TerminationInfo::PoppedTrackedPointerTag(item) =>
|
||||
format!("popped tracked tag for item {:?}", item),
|
||||
TerminationInfo::Abort =>
|
||||
format!("the evaluated program aborted execution")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ use rustc::hir::Mutability::{Mutable, Immutable};
|
|||
use rustc::mir::RetagKind;
|
||||
|
||||
use crate::{
|
||||
InterpResult, HelpersEvalContextExt,
|
||||
InterpResult, HelpersEvalContextExt, TerminationInfo,
|
||||
MemoryKind, MiriMemoryKind, RangeMap, AllocId, Pointer, Immediate, ImmTy, PlaceTy, MPlaceTy,
|
||||
};
|
||||
|
||||
|
|
@ -273,7 +273,7 @@ impl<'tcx> Stack {
|
|||
fn check_protector(item: &Item, tag: Option<Tag>, global: &GlobalState) -> InterpResult<'tcx> {
|
||||
if let Tag::Tagged(id) = item.tag {
|
||||
if Some(id) == global.tracked_pointer_tag {
|
||||
throw_unsup!(Unsupported(format!("disabling item {:?} for tag {:?}", item, tag)));
|
||||
throw_machine_stop!(TerminationInfo::PoppedTrackedPointerTag(item.clone()));
|
||||
}
|
||||
}
|
||||
if let Some(call) = item.protector {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue