diff --git a/src/shims/foreign_items/posix.rs b/src/shims/foreign_items/posix.rs index 3ececb9c20b..35decd6ddbf 100644 --- a/src/shims/foreign_items/posix.rs +++ b/src/shims/foreign_items/posix.rs @@ -312,6 +312,9 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx // We do not support forking, so there is nothing to do here. this.write_null(dest)?; } + "sched_yield" => { + this.write_null(dest)?; + } // Incomplete shims that we "stub out" just to get pre-main initialization code to work. // These shims are enabled only when the caller is in the standard library. diff --git a/src/shims/foreign_items/windows.rs b/src/shims/foreign_items/windows.rs index 1d17cbcefde..0125127a9f4 100644 --- a/src/shims/foreign_items/windows.rs +++ b/src/shims/foreign_items/windows.rs @@ -201,6 +201,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx // FIXME: we should set last_error, but to what? this.write_null(dest)?; } + "SwitchToThread" => { + // Note that once Miri supports concurrency, this will need to return a nonzero + // value if this call does result in switching to another thread. + this.write_null(dest)?; + } // Better error for attempts to create a thread "CreateThread" => { diff --git a/tests/run-pass/sync.rs b/tests/run-pass/sync.rs index 90885880e68..a4fd6f584c5 100644 --- a/tests/run-pass/sync.rs +++ b/tests/run-pass/sync.rs @@ -10,6 +10,7 @@ fn main() { test_rwlock_stdlib(); } test_spin_loop_hint(); + test_thread_yield_now(); } fn test_mutex_stdlib() { @@ -56,3 +57,7 @@ impl TryLockErrorExt for TryLockError { fn test_spin_loop_hint() { atomic::spin_loop_hint(); } + +fn test_thread_yield_now() { + std::thread::yield_now(); +}