diff --git a/src/shims/intrinsics.rs b/src/shims/intrinsics.rs index d7e025f02384..64c6e0a540f8 100644 --- a/src/shims/intrinsics.rs +++ b/src/shims/intrinsics.rs @@ -654,6 +654,12 @@ 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())) + } + 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 + }; +}