From 26e97ec54f665d5d7e35f61fe6f5a6deac5afe7f Mon Sep 17 00:00:00 2001 From: Smitty Date: Thu, 4 Mar 2021 07:48:28 -0500 Subject: [PATCH 1/2] Support breakpoint intrinsic --- src/shims/intrinsics.rs | 5 +++++ tests/compile-fail/breakpoint.rs | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 tests/compile-fail/breakpoint.rs diff --git a/src/shims/intrinsics.rs b/src/shims/intrinsics.rs index d7e025f02384..c5f1f58f7068 100644 --- a/src/shims/intrinsics.rs +++ b/src/shims/intrinsics.rs @@ -654,6 +654,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx "try" => return this.handle_try(args, dest, ret), + "breakpoint" => { + // normally this would raise a SIGTRAP, which aborts if no debugger is connected + throw_machine_stop!(TerminationInfo::Abort("Trace/breakpoint trap".to_string())) + } + name => throw_unsup_format!("unimplemented intrinsic: {}", name), } diff --git a/tests/compile-fail/breakpoint.rs b/tests/compile-fail/breakpoint.rs new file mode 100644 index 000000000000..d0a0239eb933 --- /dev/null +++ b/tests/compile-fail/breakpoint.rs @@ -0,0 +1,7 @@ +#![feature(core_intrinsics)] + +fn main() { + unsafe { + core::intrinsics::breakpoint() //~ ERROR Trace/breakpoint trap + }; +} From 8d43d727f42e918a7aeb76b4596f0726c0e8e0ae Mon Sep 17 00:00:00 2001 From: Smittyvb Date: Fri, 5 Mar 2021 07:16:50 -0500 Subject: [PATCH 2/2] Check arg count Co-authored-by: Ralf Jung --- src/shims/intrinsics.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shims/intrinsics.rs b/src/shims/intrinsics.rs index c5f1f58f7068..64c6e0a540f8 100644 --- a/src/shims/intrinsics.rs +++ b/src/shims/intrinsics.rs @@ -655,6 +655,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx "try" => return this.handle_try(args, dest, ret), "breakpoint" => { + let &[] = check_arg_count(args)?; // normally this would raise a SIGTRAP, which aborts if no debugger is connected throw_machine_stop!(TerminationInfo::Abort("Trace/breakpoint trap".to_string())) }