diff --git a/src/machine.rs b/src/machine.rs index 84ac8b81a061..73e7ce665b85 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -106,8 +106,7 @@ impl MemoryExtra { pub fn init_extern_statics<'tcx, 'mir>( this: &mut MiriEvalContext<'mir, 'tcx>, ) -> InterpResult<'tcx> { - let target_os = this.tcx.sess.target.target.target_os.as_str(); - match target_os { + match this.tcx.sess.target.target.target_os.as_str() { "linux" => { // "__cxa_thread_atexit_impl" // This should be all-zero, pointer-sized. diff --git a/src/shims/fs.rs b/src/shims/fs.rs index 9778775fca64..b779bf165d2b 100644 --- a/src/shims/fs.rs +++ b/src/shims/fs.rs @@ -802,7 +802,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx this.check_no_isolation("mkdir")?; - let _mode = if this.tcx.sess.target.target.target_os.as_str() == "macos" { + let _mode = if this.tcx.sess.target.target.target_os == "macos" { u32::from(this.read_scalar(mode_op)?.not_undef()?.to_u16()?) } else { this.read_scalar(mode_op)?.to_u32()? diff --git a/src/shims/intrinsics.rs b/src/shims/intrinsics.rs index 9a6bd58ba42e..91371e2c9df9 100644 --- a/src/shims/intrinsics.rs +++ b/src/shims/intrinsics.rs @@ -36,6 +36,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx let (dest, ret) = match ret { None => match intrinsic_name { "miri_start_panic" => return this.handle_miri_start_panic(args, unwind), + "unreachable" => throw_ub!(Unreachable), _ => throw_unsup_format!("unimplemented (diverging) intrinsic: {}", intrinsic_name), }, Some(p) => p, diff --git a/tests/compile-fail/unreachable.rs b/tests/compile-fail/unreachable.rs new file mode 100644 index 000000000000..245ef29cad35 --- /dev/null +++ b/tests/compile-fail/unreachable.rs @@ -0,0 +1,4 @@ +// error-pattern: entering unreachable code +fn main() { + unsafe { std::hint::unreachable_unchecked() } +}