Commit Graph

2907 Commits

Author SHA1 Message Date
bors c4dd3f4ef9 Auto merge of #2228 - cbeuw:futex-fix, r=RalfJung
Prevent futex_wait from actually waiting if a concurrent waker was executed before us

Fixes #2223

Two SC fences were placed in `futex_wake` (after the caller has changed `addr`), and in `futex_wait` (before we read `addr`). This guarantees that `futex_wait` sees the value written to `addr` before the last `futex_wake` call, should one exists, and avoid going into sleep with no one else to wake us up.
https://github.com/rust-lang/miri/blob/ada7b72a879d79aaa06f0a2a95edd520615da1a2/src/concurrency/weak_memory.rs#L324-L326

Earlier I proposed to use `fetch_add(0)` to read the latest value in MO, though this isn't the proper way to do it and breaks aliasing: syscall caller may pass in a `*const` from a `&` and Miri complains about write to a `SharedReadOnly` location, causing this test to fail.
https://github.com/rust-lang/miri/blob/ada7b72a879d79aaa06f0a2a95edd520615da1a2/tests/pass/concurrency/linux-futex.rs#L56-L68
2022-06-18 15:10:56 +00:00
Ralf Jung 737a5b3b98 tweak correctness comment 2022-06-18 07:59:46 -07:00
Andy Wang 807a19a50a Elaborate correctness comments 2022-06-15 01:44:32 +01:00
bors 2bbb70f584 Auto merge of #2203 - RalfJung:deprecate, r=oli-obk
deprecate -Zmiri-allow-uninit-numbers and -Zmiri-allow-ptr-int-transmute

Cc https://github.com/rust-lang/miri/issues/2187 https://github.com/rust-lang/miri/issues/2188
2022-06-13 10:23:42 +00:00
Scott McMurray 238bbd63ab Add #![feature(yeet_expr)] 2022-06-12 18:39:44 -07:00
bors 03a05ae211 Auto merge of #2195 - RalfJung:vtable-validation, r=RalfJung
test for Stacked Borrows error during vtable validation

Fixes https://github.com/rust-lang/miri/issues/2123
Needs https://github.com/rust-lang/rust/pull/97761
2022-06-12 05:34:22 +00:00
Ralf Jung c3b8509654 rename ExperimentalUb → StackedBorrowsUb 2022-06-11 17:42:23 -07:00
Andy Wang b6bcbf76fd Prevent futex_wait from reading outdated value 2022-06-11 20:45:45 +01:00
infrandomness bc27fbb2f7 Add assert_target_os_is_unix function 2022-06-11 18:50:36 +02:00
infrandomness 58d00aa642 Add target_os_is_unix helper 2022-06-11 18:45:53 +02:00
bors ada7b72a87 Auto merge of #2227 - RalfJung:doc, r=RalfJung
make some rustdoc comments more readable
2022-06-11 15:50:11 +00:00
bors c5f7a7d27a Auto merge of #2215 - InfRandomness:getpid_shim, r=RalfJung
Getpid shim
2022-06-11 15:25:26 +00:00
Ralf Jung 5f1ba4432b make some rustdoc comments more readable 2022-06-11 08:03:54 -07:00
bors 7656fc45cf Auto merge of #2222 - InfRandomness:cargo-docs, r=RalfJung
Add mandatory cargo_doc
2022-06-11 15:02:55 +00:00
InfRandomness 3e03054ef0 Add getpid shim 2022-06-11 11:28:50 +02:00
infrandomness eaa1e444eb Add mandatory cargo_doc
Co-authored-by: Joshua Nelson <github@jyn.dev>
2022-06-11 10:59:57 +02:00
Ralf Jung 4da48e06c7 make frame_in_std check work with inlining 2022-06-10 20:25:58 -07:00
bors 4d6eca1c08 Auto merge of #2218 - Nilstrieb:faster-tag-partial-eq, r=RalfJung
Optimize `SbTag::eq`

The code before generated really bad code with a branch.
This nudges LLVM towards being smarter and simply comparing
the integers.

See https://github.com/rust-lang/miri/pull/2214#issuecomment-1150124617
2022-06-08 17:34:16 +00:00
Nilstrieb 93db9a6d71 Add comment to explain manual optimization 2022-06-08 19:29:54 +02:00
Nilstrieb c01bf62ee4 Allow clippy::derive_hash_xor_eq 2022-06-08 18:43:12 +02:00
Nilstrieb 956a84bfe0 Optimize SbTag::eq
The code before generated really bad code with a branch.
This nudges LLVM towards being smarter and simply comparing
the integers.
2022-06-08 18:22:48 +02:00
Ralf Jung 657386cc91 rustup 2022-06-08 12:10:54 -04:00
Ralf Jung a310ccc9a4 some clippy-induced cleanup 2022-06-08 08:06:32 -04:00
Ralf Jung 7a5de0c98a silence another clippy lint 2022-06-07 16:01:44 -04:00
InfRandomness 4758ce74ef Fix typo 2022-06-07 17:43:45 +00:00
Ralf Jung bf372a8fbc remove warning about thread support being experimental 2022-06-06 20:16:02 -04:00
Ralf Jung b64c9a0a83 make scheduler preemptive, with configurable preemption rate 2022-06-06 20:16:02 -04:00
Ralf Jung dac95a3ad8 rename AllocationMap → RangeObjectMap 2022-06-06 20:16:02 -04:00
Ralf Jung 14913e993b deprecate -Zmiri-allow-uninit-numbers and -Zmiri-allow-ptr-int-transmute 2022-06-06 16:07:30 -04:00
Andy Wang 1b32d14255 Make racy imperfectly overlapping atomic access unsupported instead of UB
Co-authored-by: Ralf Jung <post@ralfj.de>
2022-06-06 19:16:02 +01:00
Andy Wang bf7a5c4154 Add more backgrounds on lazy store buffers
Co-authored-by: Ralf Jung <post@ralfj.de>
2022-06-06 19:16:02 +01:00
Andy Wang 6fb7c131ed Remove unused lifetimes 2022-06-06 19:16:02 +01:00
Andy Wang c731071640 Give flag temp disabling race detector a better name 2022-06-06 19:16:00 +01:00
Andy Wang 8215702d5a Refer to GitHub issue on overwritten init value 2022-06-06 19:16:00 +01:00
Andy Wang 4a07f78dad Forbade all racing mixed size atomic accesses 2022-06-06 19:16:00 +01:00
Andy Wang ceb173d647 Move logic out of machine.rs 2022-06-06 19:15:59 +01:00
Andy Wang a7c832b04a Wording improvements
Co-authored-by: Ralf Jung <post@ralfj.de>
2022-06-06 19:15:59 +01:00
Andy Wang 6a73dedb36 Update experimental threading warning 2022-06-06 19:15:59 +01:00
Andy Wang bfa56454e9 Split extra_cpp tests into sound and unsafe 2022-06-06 19:15:58 +01:00
Andy Wang 613d60db0b Allow non-racy mixed size accesses 2022-06-06 19:15:58 +01:00
Andy Wang 226ed41cca Destroy store buffers on non-racy non-atomic accesses 2022-06-06 19:15:58 +01:00
Andy Wang 2321b15342 Differentiate between not multithreading and temp disabling race detection 2022-06-06 19:15:57 +01:00
Andy Wang 6d27f188c2 Update src/concurrency/weak_memory.rs
Co-authored-by: Ralf Jung <post@ralfj.de>
2022-06-06 19:15:56 +01:00
Andy Wang e2002b4c65 Amend experimental thread support warnings 2022-06-06 19:15:55 +01:00
Andy Wang 92145373c3 Put the initialisation value into the store buffer 2022-06-06 19:15:55 +01:00
Andy Wang 577054c6de Rename variables in AllocationMap 2022-06-06 19:15:54 +01:00
Andy Wang 6b54c92377 Throw UB on imperfectly overlapping access 2022-06-06 19:15:54 +01:00
Andy Wang 5a4a1bfccc Remove incorrect comment 2022-06-06 19:15:54 +01:00
Andy Wang 335667c774 Move buffered functions into their own ext trait 2022-06-06 19:15:53 +01:00
Andy Wang 8739e45bef Move data_race and weak_memory into a submodule 2022-06-06 19:15:53 +01:00