From dcdd68b9364fb5410fccd5f66d334f6436273c4c Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Mon, 2 Dec 2019 09:13:58 +0100 Subject: [PATCH] also indicate abort via new MachineStop variant --- src/eval.rs | 2 +- src/shims/intrinsics.rs | 5 ++--- tests/compile-fail/double_panic.rs | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/eval.rs b/src/eval.rs index 2c165760418f..dbb14b7bb189 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -212,7 +212,7 @@ pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) -> match info { TerminationInfo::Exit(code) => return Some(*code), TerminationInfo::Abort => - format!("The program aborted execution") + format!("the evaluated program aborted execution") } } err_unsup!(NoMirFor(..)) => diff --git a/src/shims/intrinsics.rs b/src/shims/intrinsics.rs index 00886328030b..0cb51d593199 100644 --- a/src/shims/intrinsics.rs +++ b/src/shims/intrinsics.rs @@ -34,9 +34,8 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx // Handle diverging intrinsics. let (dest, ret) = match intrinsic_name { "abort" => { - // FIXME: Add a better way of indicating 'abnormal' termination, - // since this is not really an 'unsupported' behavior - throw_unsup_format!("the evaluated program aborted!"); + let ti = Box::new(TerminationInfo::Abort); + return Err(InterpError::MachineStop(ti).into()); } "miri_start_panic" => return this.handle_miri_start_panic(args, unwind), _ => { diff --git a/tests/compile-fail/double_panic.rs b/tests/compile-fail/double_panic.rs index 950d865c2a56..759762196b75 100644 --- a/tests/compile-fail/double_panic.rs +++ b/tests/compile-fail/double_panic.rs @@ -1,4 +1,4 @@ - //error-pattern: the evaluated program aborted + // error-pattern: the evaluated program aborted struct Foo; impl Drop for Foo { fn drop(&mut self) {