about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2024-10-14 21:36:37 +0200
committerRalf Jung <post@ralfj.de>2024-10-14 21:37:34 +0200
commitaf9842428587d1bf05a8a432411b0ade0d5b2c8e (patch)
tree79f78571f448a82f6ce7c2d1b63967d814760ec8 /src
parentd3c1036255f2c8a9b102a1bbf13ef2f8ece3edf5 (diff)
downloadrust-af9842428587d1bf05a8a432411b0ade0d5b2c8e.tar.gz
rust-af9842428587d1bf05a8a432411b0ade0d5b2c8e.zip
add test ensuring a moved mutex deadlocks
Diffstat (limited to 'src')
-rw-r--r--src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.rs16
-rw-r--r--src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.stderr16
2 files changed, 32 insertions, 0 deletions
diff --git a/src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.rs b/src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.rs
new file mode 100644
index 00000000000..b996fcaf45d
--- /dev/null
+++ b/src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.rs
@@ -0,0 +1,16 @@
+//@error-in-other-file: deadlock
+//@normalize-stderr-test: "src/sys/.*\.rs" -> "$$FILE"
+//@normalize-stderr-test: "LL \| .*" -> "LL | $$CODE"
+//@normalize-stderr-test: "\| +\^+" -> "| ^"
+//@normalize-stderr-test: "\n *= note:.*" -> ""
+use std::mem;
+use std::sync::Mutex;
+
+fn main() {
+    let m = Mutex::new(0);
+    mem::forget(m.lock());
+    // Move the lock while it is "held" (really: leaked)
+    let m2 = m;
+    // Now try to acquire the lock again.
+    let _guard = m2.lock();
+}
diff --git a/src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.stderr b/src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.stderr
new file mode 100644
index 00000000000..0ca8b3558d4
--- /dev/null
+++ b/src/tools/miri/tests/fail/concurrency/mutex-leak-move-deadlock.stderr
@@ -0,0 +1,16 @@
+error: deadlock: the evaluated program deadlocked
+  --> RUSTLIB/std/$FILE:LL:CC
+   |
+LL | $CODE
+   | ^ the evaluated program deadlocked
+   |
+note: inside `main`
+  --> tests/fail/concurrency/mutex-leak-move-deadlock.rs:LL:CC
+   |
+LL | $CODE
+   | ^
+
+note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
+
+error: aborting due to 1 previous error
+