From c9b9c17fca0d781aa9e80180b605bff3cb1db038 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 27 Nov 2022 12:57:30 +0100 Subject: [PATCH] add scoped thread test --- .../miri/tests/pass/concurrency/scope.rs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/tools/miri/tests/pass/concurrency/scope.rs diff --git a/src/tools/miri/tests/pass/concurrency/scope.rs b/src/tools/miri/tests/pass/concurrency/scope.rs new file mode 100644 index 00000000000..ce5d17f5f2d --- /dev/null +++ b/src/tools/miri/tests/pass/concurrency/scope.rs @@ -0,0 +1,24 @@ +use std::thread; + +fn main() { + let mut a = vec![1, 2, 3]; + let mut x = 0; + + thread::scope(|s| { + s.spawn(|| { + // We can borrow `a` here. + let _s = format!("hello from the first scoped thread: {a:?}"); + }); + s.spawn(|| { + let _s = format!("hello from the second scoped thread"); + // We can even mutably borrow `x` here, + // because no other threads are using it. + x += a[0] + a[2]; + }); + let _s = format!("hello from the main thread"); + }); + + // After the scope, we can modify and access our variables again: + a.push(4); + assert_eq!(x, a.len()); +}