1
1
Running GenMC Verification...
2
- error: unsupported operation: Could not lock Mutex, which may indicate a deadlock. (GenMC mode does not fully support deadlock detection yet).
2
+ error: the evaluated program deadlocked
3
3
--> RUSTLIB/std/src/sync/poison/mutex.rs:LL:CC
4
4
|
5
5
LL | self.inner.lock();
6
- | ^ unsupported operation occurred here
6
+ | ^^^^^^^^^^^^^^^^^ this thread got stuck here
7
+ |
8
+ = note: BACKTRACE on thread `unnamed-ID`:
9
+ = note: inside `std::sync::Mutex::<u64>::lock` at RUSTLIB/std/src/sync/poison/mutex.rs:LL:CC
10
+ note: inside closure
11
+ --> tests/genmc/fail/intercept/mutex_deadlock.rs:LL:CC
12
+ |
13
+ LL | let mut y = Y.lock().unwrap();
14
+ | ^^^^^^^^
15
+ = note: inside `<std::boxed::Box<{closure@tests/genmc/fail/intercept/mutex_deadlock.rs:LL:CC}> as std::ops::FnOnce<()>>::call_once` at RUSTLIB/alloc/src/boxed.rs:LL:CC
16
+ note: inside `genmc::spawn_pthread_closure::thread_func::<{closure@tests/genmc/fail/intercept/mutex_deadlock.rs:LL:CC}>`
17
+ --> tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC
18
+ |
19
+ LL | f();
20
+ | ^^^
21
+
22
+ error: the evaluated program deadlocked
23
+ --> tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC
24
+ |
25
+ LL | if unsafe { libc::pthread_join(thread_id, std::ptr::null_mut()) } != 0 {
26
+ | ^ this thread got stuck here
27
+ |
28
+ = note: BACKTRACE:
29
+ = note: inside `genmc::join_pthread` at tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC
30
+ note: inside closure
31
+ --> tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC
32
+ |
33
+ LL | let _ = thread_ids.map(|id| join_pthread(id));
34
+ | ^^^^^^^^^^^^^^^^
35
+ = note: inside closure at RUSTLIB/core/src/ops/try_trait.rs:LL:CC
36
+ = note: inside `<std::iter::Map<std::array::drain::Drain<'_, u64>, {closure@std::ops::try_trait::NeverShortCircuit<()>::wrap_mut_1<u64, {closure@tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC}>::{closure#0}}> as std::iter::traits::unchecked_iterator::UncheckedIterator>::next_unchecked` at RUSTLIB/core/src/iter/adapters/map.rs:LL:CC
37
+ = note: inside closure at RUSTLIB/core/src/array/mod.rs:LL:CC
38
+ = note: inside `std::array::try_from_fn_erased::<(), std::ops::try_trait::NeverShortCircuit<()>, {closure@std::array::try_from_trusted_iterator::next<std::ops::try_trait::NeverShortCircuit<()>, std::iter::Map<std::array::drain::Drain<'_, u64>, {closure@std::ops::try_trait::NeverShortCircuit<()>::wrap_mut_1<u64, {closure@tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC}>::{closure#0}}>>::{closure#0}}>` at RUSTLIB/core/src/array/mod.rs:LL:CC
39
+ = note: inside `std::array::try_from_fn::<std::ops::try_trait::NeverShortCircuit<()>, 2, {closure@std::array::try_from_trusted_iterator::next<std::ops::try_trait::NeverShortCircuit<()>, std::iter::Map<std::array::drain::Drain<'_, u64>, {closure@std::ops::try_trait::NeverShortCircuit<()>::wrap_mut_1<u64, {closure@tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC}>::{closure#0}}>>::{closure#0}}>` at RUSTLIB/core/src/array/mod.rs:LL:CC
40
+ = note: inside `std::array::try_from_trusted_iterator::<(), std::ops::try_trait::NeverShortCircuit<()>, 2, std::iter::Map<std::array::drain::Drain<'_, u64>, {closure@std::ops::try_trait::NeverShortCircuit<()>::wrap_mut_1<u64, {closure@tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC}>::{closure#0}}>>` at RUSTLIB/core/src/array/mod.rs:LL:CC
41
+ = note: inside closure at RUSTLIB/core/src/array/mod.rs:LL:CC
42
+ = note: inside `std::array::drain::drain_array_with::<u64, std::ops::try_trait::NeverShortCircuit<[(); 2]>, 2, {closure@std::array::<impl [u64; 2]>::try_map<std::ops::try_trait::NeverShortCircuit<()>, {closure@std::ops::try_trait::NeverShortCircuit<()>::wrap_mut_1<u64, {closure@tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC}>::{closure#0}}>::{closure#0}}>` at RUSTLIB/core/src/array/drain.rs:LL:CC
43
+ = note: inside `std::array::<impl [u64; 2]>::try_map::<std::ops::try_trait::NeverShortCircuit<()>, {closure@std::ops::try_trait::NeverShortCircuit<()>::wrap_mut_1<u64, {closure@tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC}>::{closure#0}}>` at RUSTLIB/core/src/array/mod.rs:LL:CC
44
+ = note: inside `std::array::<impl [u64; 2]>::map::<{closure@tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC}, ()>` at RUSTLIB/core/src/array/mod.rs:LL:CC
45
+ note: inside `genmc::join_pthreads::<TAG>`
46
+ --> tests/genmc/fail/intercept/../../../utils/genmc.rs:LL:CC
47
+ |
48
+ LL | let _ = thread_ids.map(|id| join_pthread(id));
49
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
50
+ note: inside `miri_start`
51
+ --> tests/genmc/fail/intercept/mutex_deadlock.rs:LL:CC
52
+ |
53
+ LL | join_pthreads([t0, t1]);
54
+ | ^^^^^^^^^^^^^^^^^^^^^^^
55
+
56
+ error: the evaluated program deadlocked
57
+ --> RUSTLIB/std/src/sync/poison/mutex.rs:LL:CC
58
+ |
59
+ LL | self.inner.lock();
60
+ | ^ this thread got stuck here
7
61
|
8
- = help: this is likely not a bug in the program; it indicates that the program performed an operation that Miri does not support
9
62
= note: BACKTRACE on thread `unnamed-ID`:
10
63
= note: inside `std::sync::Mutex::<u64>::lock` at RUSTLIB/std/src/sync/poison/mutex.rs:LL:CC
11
64
note: inside closure
@@ -22,5 +75,5 @@ LL | f();
22
75
23
76
note: add `-Zmiri-genmc-print-genmc-output` to MIRIFLAGS to see the detailed GenMC error report
24
77
25
- error: aborting due to 1 previous error
78
+ error: aborting due to 3 previous errors
26
79
0 commit comments