]> git.lizzy.rs Git - rust.git/log
rust.git
2 years agocheck that tag_alloc_base_pointer is not called on the wrong things
Ralf Jung [Tue, 14 Jun 2022 16:45:02 +0000 (09:45 -0700)]
check that tag_alloc_base_pointer is not called on the wrong things

2 years agoAuto merge of #2249 - dtolnay-contrib:rustfmt3, r=oli-obk
bors [Tue, 21 Jun 2022 07:39:16 +0000 (07:39 +0000)]
Auto merge of #2249 - dtolnay-contrib:rustfmt3, r=oli-obk

Format tests with rustfmt (151-200 of 300)

Extracted from #2097.

This PR is still only doing the easy cases with no comments involved.

In the next PRs after this, I'll start grouping by common comment patterns, e.g. all the cases resembling https://github.com/rust-lang/miri/pull/2097#discussion_r862436672 together in one PR.

2 years agoAuto merge of #2246 - dtolnay-contrib:rustfmt1, r=oli-obk
bors [Tue, 21 Jun 2022 06:57:41 +0000 (06:57 +0000)]
Auto merge of #2246 - dtolnay-contrib:rustfmt1, r=oli-obk

Format tests with rustfmt (51-100 of 300)

Extracted from #2097.

Like #2244, this is intended to be "easy" cases which don't involve comments in the vicinity.

2 years agoBless stderr files after rustfmt
David Tolnay [Tue, 21 Jun 2022 06:49:55 +0000 (23:49 -0700)]
Bless stderr files after rustfmt

2 years agoManual adjustments
David Tolnay [Tue, 21 Jun 2022 06:45:49 +0000 (23:45 -0700)]
Manual adjustments

2 years agoFormat tests with rustfmt (151-200 of 300)
David Tolnay [Tue, 21 Jun 2022 06:40:39 +0000 (23:40 -0700)]
Format tests with rustfmt (151-200 of 300)

2 years agoManual adjustments
David Tolnay [Mon, 20 Jun 2022 22:43:42 +0000 (15:43 -0700)]
Manual adjustments

2 years agoAuto merge of #2247 - dtolnay-contrib:rustfmt2, r=RalfJung
bors [Tue, 21 Jun 2022 04:12:42 +0000 (04:12 +0000)]
Auto merge of #2247 - dtolnay-contrib:rustfmt2, r=RalfJung

Format tests with rustfmt (101-150 of 300)

Extracted from #2097.

Like https://github.com/rust-lang/miri/pull/2244, these are "easy" cases that do not involve moving around comments.

2 years agoAuto merge of #2244 - dtolnay-contrib:rustfmt0, r=RalfJung
bors [Tue, 21 Jun 2022 02:51:35 +0000 (02:51 +0000)]
Auto merge of #2244 - dtolnay-contrib:rustfmt0, r=RalfJung

Format tests and benches with rustfmt (1-50 of 300)

Extracted from #2097.

I filtered this PR to contain exclusively "easy" cases to start off with, i.e. where there is no compiletest_rs (or other) comment in the vicinity that might need to get manually repositioned.

2 years agoManual adjustments
David Tolnay [Mon, 20 Jun 2022 23:08:00 +0000 (16:08 -0700)]
Manual adjustments

2 years agoFormat tests with rustfmt (101-150 of 300)
David Tolnay [Mon, 20 Jun 2022 23:00:37 +0000 (16:00 -0700)]
Format tests with rustfmt (101-150 of 300)

2 years agoBless stdout files after rustfmt
David Tolnay [Mon, 20 Jun 2022 22:39:27 +0000 (15:39 -0700)]
Bless stdout files after rustfmt

2 years agoFormat tests with rustfmt (51-100 of 300)
David Tolnay [Mon, 20 Jun 2022 22:30:34 +0000 (15:30 -0700)]
Format tests with rustfmt (51-100 of 300)

2 years agoAdd rustfmt CI for currently formatted directories
David Tolnay [Mon, 20 Jun 2022 09:43:13 +0000 (02:43 -0700)]
Add rustfmt CI for currently formatted directories

2 years agoManual adjustments
David Tolnay [Mon, 20 Jun 2022 09:43:06 +0000 (02:43 -0700)]
Manual adjustments

2 years agoAuto merge of #2243 - saethlin:color-always, r=oli-obk
bors [Mon, 20 Jun 2022 15:12:55 +0000 (15:12 +0000)]
Auto merge of #2243 - saethlin:color-always, r=oli-obk

Pass --color=always through cargo-miri

Closes https://github.com/rust-lang/miri/issues/2037

I just implemented the fix suggested in that issue and it seems to work without issue.

2 years agoPass --color=always through cargo-miri
Ben Kimock [Mon, 20 Jun 2022 02:57:10 +0000 (22:57 -0400)]
Pass --color=always through cargo-miri

2 years agoBless stderr files after rustfmt
David Tolnay [Mon, 20 Jun 2022 03:43:35 +0000 (20:43 -0700)]
Bless stderr files after rustfmt

2 years agoFormat tests and benches with rustfmt (1-50 of 300)
David Tolnay [Mon, 20 Jun 2022 03:33:59 +0000 (20:33 -0700)]
Format tests and benches with rustfmt (1-50 of 300)

2 years agoAuto merge of #2242 - dtolnay-contrib:rustfmtskip, r=RalfJung
bors [Mon, 20 Jun 2022 05:23:46 +0000 (05:23 +0000)]
Auto merge of #2242 - dtolnay-contrib:rustfmtskip, r=RalfJung

Add rustfmt::skip to some files

Extracted from https://github.com/rust-lang/miri/pull/2097.

Five of the files being skipped here are because rustfmt is buggy (https://github.com/rust-lang/rustfmt/issues/5391; see the error messages below). The other two have clearly preferable manual formatting.

```console
error[internal]: left behind trailing whitespace
  --> tests/fail/validity/transmute_through_ptr.rs:18:18:1
   |
18 |
   | ^^^^
   |

warning: rustfmt has failed to format. See previous 1 errors.

error[internal]: left behind trailing whitespace
  --> tests/fail/stacked_borrows/illegal_read2.rs:10:10:1
   |
10 |
   | ^^^^
   |

warning: rustfmt has failed to format. See previous 1 errors.

error[internal]: left behind trailing whitespace
  --> tests/fail/stacked_borrows/illegal_read5.rs:15:15:1
   |
15 |
   | ^^^^
   |

warning: rustfmt has failed to format. See previous 1 errors.

error[internal]: left behind trailing whitespace
  --> tests/fail/stacked_borrows/illegal_read1.rs:10:10:1
   |
10 |
   | ^^^^
   |

warning: rustfmt has failed to format. See previous 1 errors.

error[internal]: left behind trailing whitespace
 --> /git/miri/tests/fail/erroneous_const2.rs:9:9:1
  |
9 |
  | ^^^^
  |

warning: rustfmt has failed to format. See previous 1 errors.
```

2 years agoAdd rustfmt::skip to some files
David Tolnay [Sat, 30 Apr 2022 18:07:36 +0000 (11:07 -0700)]
Add rustfmt::skip to some files

Five of the files being skipped here are because rustfmt is buggy (see
the error messages below). The others have clearly preferable manual
formatting.

    error[internal]: left behind trailing whitespace
      --> tests/fail/validity/transmute_through_ptr.rs:18:18:1
       |
    18 |
       | ^^^^
       |

    warning: rustfmt has failed to format. See previous 1 errors.

    error[internal]: left behind trailing whitespace
      --> tests/fail/stacked_borrows/illegal_read2.rs:10:10:1
       |
    10 |
       | ^^^^
       |

    warning: rustfmt has failed to format. See previous 1 errors.

    error[internal]: left behind trailing whitespace
      --> tests/fail/stacked_borrows/illegal_read5.rs:15:15:1
       |
    15 |
       | ^^^^
       |

    warning: rustfmt has failed to format. See previous 1 errors.

    error[internal]: left behind trailing whitespace
      --> tests/fail/stacked_borrows/illegal_read1.rs:10:10:1
       |
    10 |
       | ^^^^
       |

    warning: rustfmt has failed to format. See previous 1 errors.

    error[internal]: left behind trailing whitespace
     --> tests/fail/erroneous_const2.rs:9:9:1
      |
    9 |
      | ^^^^
      |

    warning: rustfmt has failed to format. See previous 1 errors.

2 years agoAuto merge of #2240 - RalfJung:readme, r=RalfJung
bors [Sun, 19 Jun 2022 16:19:48 +0000 (16:19 +0000)]
Auto merge of #2240 - RalfJung:readme, r=RalfJung

readme

Emulation of weak memory effects is not a kind of UB, so put it into a separate paragraph. Also remove the note about incomplete threading support. :)

2 years agoreadme
Ralf Jung [Sun, 19 Jun 2022 16:18:16 +0000 (09:18 -0700)]
readme

2 years agoAuto merge of #2228 - cbeuw:futex-fix, r=RalfJung
bors [Sat, 18 Jun 2022 15:10:56 +0000 (15:10 +0000)]
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

2 years agotweak correctness comment
Ralf Jung [Sat, 18 Jun 2022 14:59:46 +0000 (07:59 -0700)]
tweak correctness comment

2 years agoAuto merge of #2239 - RalfJung:rustup, r=RalfJung
bors [Sat, 18 Jun 2022 14:50:15 +0000 (14:50 +0000)]
Auto merge of #2239 - RalfJung:rustup, r=RalfJung

rustup

Cc https://github.com/rust-lang/rust/issues/98107

2 years agorustup
Ralf Jung [Sat, 18 Jun 2022 14:49:40 +0000 (07:49 -0700)]
rustup

2 years agoAuto merge of #2237 - RalfJung:ice, r=oli-obk
bors [Thu, 16 Jun 2022 20:26:12 +0000 (20:26 +0000)]
Auto merge of #2237 - RalfJung:ice, r=oli-obk

add ICE error level

Fixes https://github.com/rust-lang/miri/issues/2235

But I am not sure if anything else should be adjusted when adding a new error level...

2 years agoAuto merge of #2236 - RalfJung:rustup, r=RalfJung
bors [Thu, 16 Jun 2022 18:18:39 +0000 (18:18 +0000)]
Auto merge of #2236 - RalfJung:rustup, r=RalfJung

rustup

I feel like tests became a *lot* slower. I am not sure what is going on and don't have time to debug right now.

2 years agorustup
Ralf Jung [Thu, 16 Jun 2022 17:03:41 +0000 (10:03 -0700)]
rustup

2 years agoadd ICE error level
Ralf Jung [Thu, 16 Jun 2022 18:02:54 +0000 (11:02 -0700)]
add ICE error level

2 years agoElaborate correctness comments
Andy Wang [Wed, 15 Jun 2022 00:44:32 +0000 (01:44 +0100)]
Elaborate correctness comments

2 years agoReduce the number of iterations
Andy Wang [Mon, 13 Jun 2022 17:24:19 +0000 (18:24 +0100)]
Reduce the number of iterations

2 years agoAuto merge of #2207 - RalfJung:ui_test_parallelism, r=oli-obk
bors [Mon, 13 Jun 2022 16:08:54 +0000 (16:08 +0000)]
Auto merge of #2207 - RalfJung:ui_test_parallelism, r=oli-obk

ui_test: ensure all worker threads stay around

Also organize files such that the by far slowest test (weak_memory/consistency) always starts first. It still finishes last on my system... even after I halved the iteration count.

Fixes https://github.com/rust-lang/miri/issues/2204

2 years agoDocument file sorting
Oli Scherer [Mon, 13 Jun 2022 13:20:01 +0000 (15:20 +0200)]
Document file sorting

2 years agoorganize more files into folders, and run the weak-mem consistency test as the very...
Ralf Jung [Mon, 6 Jun 2022 22:53:33 +0000 (18:53 -0400)]
organize more files into folders, and run the weak-mem consistency test as the very first since it is so slow

2 years agotest files in a deterministic order
Ralf Jung [Mon, 6 Jun 2022 22:53:19 +0000 (18:53 -0400)]
test files in a deterministic order

2 years agoensure all worker threads stay around
Ralf Jung [Mon, 6 Jun 2022 22:34:41 +0000 (18:34 -0400)]
ensure all worker threads stay around

2 years agoAuto merge of #2232 - rust-lang:gesundheit, r=oli-obk
bors [Mon, 13 Jun 2022 13:44:16 +0000 (13:44 +0000)]
Auto merge of #2232 - rust-lang:gesundheit, r=oli-obk

Always show stderr on test failure.

fixes #2224

I overengineered the original thing to the point where it became fragile. Let's just always print stderr, unless it was already printed

2 years agoAuto merge of #2179 - RalfJung:rustc, r=oli-obk
bors [Mon, 13 Jun 2022 13:13:29 +0000 (13:13 +0000)]
Auto merge of #2179 - RalfJung:rustc, r=oli-obk

test ui output also in rustc test suite

`@oli-obk` when I just tried this locally (`./x.py test src/tools/miri --stage 0`), it worked fine. What differences had you seen before?

2 years agoAuto merge of #2203 - RalfJung:deprecate, r=oli-obk
bors [Mon, 13 Jun 2022 10:23:42 +0000 (10:23 +0000)]
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

2 years agoAlways show stderr on test failure.
Oli Scherer [Mon, 13 Jun 2022 08:55:34 +0000 (08:55 +0000)]
Always show stderr on test failure.

2 years agoAuto merge of #2230 - scottmcm:master, r=RalfJung
bors [Mon, 13 Jun 2022 04:43:28 +0000 (04:43 +0000)]
Auto merge of #2230 - scottmcm:master, r=RalfJung

Add `#![feature(yeet_expr)]`

Hopefully enough for https://github.com/rust-lang/rust/issues/98036

2 years agoAdd `#![feature(yeet_expr)]`
Scott McMurray [Mon, 13 Jun 2022 00:55:41 +0000 (17:55 -0700)]
Add `#![feature(yeet_expr)]`

2 years agoAuto merge of #2229 - DrMeepster:patch-1, r=RalfJung
bors [Mon, 13 Jun 2022 01:06:22 +0000 (01:06 +0000)]
Auto merge of #2229 - DrMeepster:patch-1, r=RalfJung

Add cache location on windows to documentation

2 years agocorrect the path
DrMeepster [Sun, 12 Jun 2022 19:10:13 +0000 (12:10 -0700)]
correct the path

2 years agoAuto merge of #2195 - RalfJung:vtable-validation, r=RalfJung
bors [Sun, 12 Jun 2022 05:34:22 +0000 (05:34 +0000)]
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

2 years agobless
Ralf Jung [Sun, 12 Jun 2022 05:34:01 +0000 (22:34 -0700)]
bless

2 years agotweak punctuation
Ralf Jung [Sun, 12 Jun 2022 00:45:33 +0000 (17:45 -0700)]
tweak punctuation

2 years agorustup
Ralf Jung [Sun, 12 Jun 2022 00:42:53 +0000 (17:42 -0700)]
rustup

2 years agorename ExperimentalUb → StackedBorrowsUb
Ralf Jung [Sun, 5 Jun 2022 16:26:16 +0000 (12:26 -0400)]
rename ExperimentalUb → StackedBorrowsUb

2 years agotest for Stacked Borrows error during vtable validation
Ralf Jung [Sun, 5 Jun 2022 16:25:46 +0000 (12:25 -0400)]
test for Stacked Borrows error during vtable validation

2 years agoAuto merge of #2226 - InfRandomness:unix-helpers, r=RalfJung
bors [Sun, 12 Jun 2022 00:08:38 +0000 (00:08 +0000)]
Auto merge of #2226 - InfRandomness:unix-helpers, r=RalfJung

Add unix helpers

This creates unix helper(s)

2 years agoAdd cache location on windows to documentation
DrMeepster [Sat, 11 Jun 2022 23:41:32 +0000 (16:41 -0700)]
Add cache location on windows to documentation

2 years agoPrevent futex_wait from reading outdated value
Andy Wang [Sat, 11 Jun 2022 19:45:45 +0000 (20:45 +0100)]
Prevent futex_wait from reading outdated value

2 years agoAdd `assert_target_os_is_unix` function
infrandomness [Sat, 11 Jun 2022 15:54:23 +0000 (17:54 +0200)]
Add `assert_target_os_is_unix` function

2 years agoAdd target_os_is_unix helper
infrandomness [Sat, 11 Jun 2022 13:37:49 +0000 (15:37 +0200)]
Add target_os_is_unix helper

2 years agoAuto merge of #2227 - RalfJung:doc, r=RalfJung
bors [Sat, 11 Jun 2022 15:50:11 +0000 (15:50 +0000)]
Auto merge of #2227 - RalfJung:doc, r=RalfJung

make some rustdoc comments more readable

2 years agoAuto merge of #2215 - InfRandomness:getpid_shim, r=RalfJung
bors [Sat, 11 Jun 2022 15:25:26 +0000 (15:25 +0000)]
Auto merge of #2215 - InfRandomness:getpid_shim, r=RalfJung

Getpid shim

2 years agomake some rustdoc comments more readable
Ralf Jung [Sat, 11 Jun 2022 15:03:51 +0000 (08:03 -0700)]
make some rustdoc comments more readable

2 years agoAuto merge of #2222 - InfRandomness:cargo-docs, r=RalfJung
bors [Sat, 11 Jun 2022 15:02:55 +0000 (15:02 +0000)]
Auto merge of #2222 - InfRandomness:cargo-docs, r=RalfJung

Add mandatory cargo_doc

2 years agoAdd getpid shim
InfRandomness [Wed, 8 Jun 2022 08:09:38 +0000 (10:09 +0200)]
Add getpid shim

2 years agoAdd mandatory cargo_doc
infrandomness [Thu, 9 Jun 2022 14:20:47 +0000 (16:20 +0200)]
Add mandatory cargo_doc

Co-authored-by: Joshua Nelson <github@jyn.dev>
2 years agoAuto merge of #2225 - RalfJung:frame-in-std-inlined, r=RalfJung
bors [Sat, 11 Jun 2022 03:27:13 +0000 (03:27 +0000)]
Auto merge of #2225 - RalfJung:frame-in-std-inlined, r=RalfJung

make frame_in_std check work with inlining

`@InfRandomness` this should help with your trouble in https://github.com/rust-lang/miri/pull/2215

2 years agomake frame_in_std check work with inlining
Ralf Jung [Sat, 11 Jun 2022 03:23:30 +0000 (20:23 -0700)]
make frame_in_std check work with inlining

2 years agoAuto merge of #2219 - saethlin:more-benchmarks, r=RalfJung
bors [Thu, 9 Jun 2022 14:20:42 +0000 (14:20 +0000)]
Auto merge of #2219 - saethlin:more-benchmarks, r=RalfJung

Add more bench-cargo-miri programs

These example programs are derived from long-running (>15 minutes) tests in the test suites of highly-downloaded crates (if I have my way, that runtime will not be correct for long). They should serve as realistic but also somewhat pathological workloads for the interpreter.

The unicode program stresses the code which looks for adjacent and equal stacks to merge them.
The backtraces program has an uncommonly large working set of borrow tags per borrow stack.

This also updates the .gitignore to ignore files commonly emitted in the course of using these benchmark programs.

---

The benchmark programs are so-named to avoid confusingly duplicating the names of the crates they are benchmarking. Is that a good idea? I started doing this so that I could use `cargo add` but now I'm not entirely sold on the names.

2 years agoAdd more bench-cargo-miri programs
Ben Kimock [Wed, 8 Jun 2022 23:32:43 +0000 (19:32 -0400)]
Add more bench-cargo-miri programs

These example programs are derived from long-running (>15 minutes) tests
in the test suites of highly-downloaded crates. They should serve as
realistic but also somewhat pathological workloads for the interpreter.

The unicode program stresses the code which looks for adjacent and equal
stacks to merge them.

The backtrace program has an uncommonly large working set of borrow tags
per borrow stack.

This also updates the .gitignore to ignore files commonly emitted in the
course of using these benchmark programs.

2 years agoAuto merge of #2218 - Nilstrieb:faster-tag-partial-eq, r=RalfJung
bors [Wed, 8 Jun 2022 17:34:16 +0000 (17:34 +0000)]
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

2 years agoAdd comment to explain manual optimization
Nilstrieb [Wed, 8 Jun 2022 17:29:54 +0000 (19:29 +0200)]
Add comment to explain manual optimization

2 years agoAllow `clippy::derive_hash_xor_eq`
Nilstrieb [Wed, 8 Jun 2022 16:43:12 +0000 (18:43 +0200)]
Allow `clippy::derive_hash_xor_eq`

2 years agoOptimize `SbTag::eq`
Nilstrieb [Wed, 8 Jun 2022 16:22:48 +0000 (18:22 +0200)]
Optimize `SbTag::eq`

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

2 years agoAuto merge of #2217 - RalfJung:rustup, r=RalfJung
bors [Wed, 8 Jun 2022 16:12:50 +0000 (16:12 +0000)]
Auto merge of #2217 - RalfJung:rustup, r=RalfJung

rustup

2 years agorustup
Ralf Jung [Wed, 8 Jun 2022 16:10:54 +0000 (12:10 -0400)]
rustup

2 years agoAuto merge of #2216 - RalfJung:rustup, r=RalfJung
bors [Wed, 8 Jun 2022 12:14:30 +0000 (12:14 +0000)]
Auto merge of #2216 - RalfJung:rustup, r=RalfJung

rustup

Locally I see lots of new clippy failures, but did clippy really add a bunch of new lints recently?

2 years agodocument how to get a toolchain with clippy
Ralf Jung [Wed, 8 Jun 2022 12:12:20 +0000 (08:12 -0400)]
document how to get a toolchain with clippy

2 years agosome clippy-induced cleanup
Ralf Jung [Wed, 8 Jun 2022 12:06:32 +0000 (08:06 -0400)]
some clippy-induced cleanup

2 years agorustup
Ralf Jung [Wed, 8 Jun 2022 11:57:43 +0000 (07:57 -0400)]
rustup

2 years agoAuto merge of #2213 - RalfJung:clippy, r=RalfJung
bors [Tue, 7 Jun 2022 21:08:56 +0000 (21:08 +0000)]
Auto merge of #2213 - RalfJung:clippy, r=RalfJung

make clippy mandatory for bors, and silence another clippy lint

We don't currently trigger this but I saw it in a PR and I'd rather evaluate this on a case-by-case basis during review, thank you clippy.

2 years agolinux-futex test: ensure we join all threads
Ralf Jung [Tue, 7 Jun 2022 21:03:11 +0000 (17:03 -0400)]
linux-futex test: ensure we join all threads

2 years agogate bors on clippy
Ralf Jung [Tue, 7 Jun 2022 20:03:32 +0000 (16:03 -0400)]
gate bors on clippy

2 years agosilence another clippy lint
Ralf Jung [Tue, 7 Jun 2022 20:01:44 +0000 (16:01 -0400)]
silence another clippy lint

2 years agoAuto merge of #2212 - RalfJung:cargo-miri, r=RalfJung
bors [Tue, 7 Jun 2022 18:14:33 +0000 (18:14 +0000)]
Auto merge of #2212 - RalfJung:cargo-miri, r=RalfJung

update and move cargo-miri operational description

2 years agoupdate and move cargo-miri operational description
Ralf Jung [Tue, 7 Jun 2022 17:59:47 +0000 (13:59 -0400)]
update and move cargo-miri operational description

2 years agoAuto merge of #2211 - InfRandomness:typo, r=RalfJung
bors [Tue, 7 Jun 2022 17:47:27 +0000 (17:47 +0000)]
Auto merge of #2211 - InfRandomness:typo, r=RalfJung

Fix typo

2 years agoFix typo
InfRandomness [Tue, 7 Jun 2022 17:40:14 +0000 (17:40 +0000)]
Fix typo

2 years agoAuto merge of #2210 - RalfJung:tls-drop-test, r=RalfJung
bors [Tue, 7 Jun 2022 11:59:47 +0000 (11:59 +0000)]
Auto merge of #2210 - RalfJung:tls-drop-test, r=RalfJung

add stdlib test for TLS dtor order

2 years agoadd stdlib test for TLS dtor order
Ralf Jung [Tue, 7 Jun 2022 11:58:21 +0000 (07:58 -0400)]
add stdlib test for TLS dtor order

2 years agoAuto merge of #2208 - RalfJung:preempt, r=RalfJung
bors [Tue, 7 Jun 2022 01:48:57 +0000 (01:48 +0000)]
Auto merge of #2208 - RalfJung:preempt, r=RalfJung

Make scheduler preemptive

This is actually fairly easy. :D I just roll the dice on each terminator to decide whether we want to yield the active thread. I think with this we are also justified to no longer show "experimental" warnings when a thread is spawned. :)

Closes https://github.com/rust-lang/miri/issues/1388

2 years agobless tests
Ralf Jung [Mon, 6 Jun 2022 23:00:50 +0000 (19:00 -0400)]
bless tests

2 years agoremove warning about thread support being experimental
Ralf Jung [Mon, 6 Jun 2022 22:58:06 +0000 (18:58 -0400)]
remove warning about thread support being experimental

2 years agomake scheduler preemptive, with configurable preemption rate
Ralf Jung [Mon, 6 Jun 2022 21:44:16 +0000 (17:44 -0400)]
make scheduler preemptive, with configurable preemption rate

2 years agorename AllocationMap → RangeObjectMap
Ralf Jung [Mon, 6 Jun 2022 21:27:46 +0000 (17:27 -0400)]
rename AllocationMap → RangeObjectMap

2 years agoAuto merge of #2209 - RalfJung:if-only, r=RalfJung
bors [Mon, 6 Jun 2022 23:48:52 +0000 (23:48 +0000)]
Auto merge of #2209 - RalfJung:if-only, r=RalfJung

hotfix for incorrect only- logic

This hacks around https://github.com/rust-lang/miri/issues/2206. We don't currently use `only-32bit` or so, which is why this works.

2 years agobless Windows
Ralf Jung [Mon, 6 Jun 2022 23:48:21 +0000 (19:48 -0400)]
bless Windows

2 years agohotfix for incorrect only- logic
Ralf Jung [Mon, 6 Jun 2022 23:11:59 +0000 (19:11 -0400)]
hotfix for incorrect only- logic

2 years agodeprecate -Zmiri-allow-uninit-numbers and -Zmiri-allow-ptr-int-transmute
Ralf Jung [Mon, 6 Jun 2022 15:45:41 +0000 (11:45 -0400)]
deprecate -Zmiri-allow-uninit-numbers and -Zmiri-allow-ptr-int-transmute

2 years agoAuto merge of #1963 - cbeuw:weak-memory, r=RalfJung
bors [Mon, 6 Jun 2022 19:30:38 +0000 (19:30 +0000)]
Auto merge of #1963 - cbeuw:weak-memory, r=RalfJung

Weak memory emulation using store buffers

This implements the second half of the [Lidbury & Donaldson paper](https://www.doc.ic.ac.uk/~afd/homepages/papers/pdfs/2017/POPL.pdf): weak memory emulation using store buffers. A store buffer is created over a memory range on atomic access. Stores will push store elements into the buffer and loads will search through the buffer in reverse modification order, determine which store elements are valid for the current load, and pick one randomly.

This implementation will never generate weak memory behaviours forbidden by the C++11 model, but it is incapable of producing all possible weak behaviours allowed by the model. There are certain weak behaviours observable on real hardware but not while using this.

Note that this implementation does not take into account of C++20's memory model revision to SC accesses and fences introduced by [P0668](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0668r5.html). This implementation is not fully correct under the revised C++20 model and may generate behaviours C++20 disallows.

Rust follows the C++20 memory model (except for the Consume ordering and some operations not performable through C++'s std::atomic<T> API). It is therefore possible for this implementation to generate behaviours never observable when the same program is compiled and run natively. Unfortunately, no literature exists at the time of writing which proposes an implementable and C++20-compatible relaxed memory model that supports all atomic operation existing in Rust. The closest one is [A Promising Semantics for Relaxed-Memory Concurrency](https://www.cs.tau.ac.il/~orilahav/papers/popl17.pdf) by Jeehoon Kang et al. However, this model lacks SC accesses and is therefore unusable by Miri (SC accesses are everywhere in library code).

Safe/sound Rust allows for more operations on atomic locations than the C++20 atomic API was intended to allow, such as non-atomically accessing a previously atomically accessed location, or accessing previously atomically accessed locations with a differently sized operation (such as accessing the top 16 bits of an `AtomicU32`). These scenarios are generally left undefined in formalisations of C++ memory model, even though they [became possible](https://lists.isocpp.org/std-discussion/2022/05/1662.php) in C++20 with `std::atomic_ref<T>`. In Rust, these operations can only be done through a `&mut AtomicFoo` reference or one derived from it, therefore these operations can only happen after all previous accesses on the same locations. This implementation is adapted to accommodate these.

----------
TODOs:

- [x] Add tests cases that actually demonstrate weak memory behaviour (even if they are scheduler dependent)
- [x] Change `{mutex, rwlock, cond, srwlock}_get_or_create_id` functions under `src/shims` to use atomic RMWs instead of separate read -> check if need to create a new one -> write steps
- [x] Make sure Crossbeam tests still pass (https://github.com/crossbeam-rs/crossbeam/pull/831)
- [x] Move as much weak-memory related code as possible into `weak_memory.rs`
- [x] Remove "weak memory effects are not emulated" warnings
- [x] Accommodate certain mixed size and mixed atomicity accesses Rust allows on top of the C++ model

2 years agoMake racy imperfectly overlapping atomic access unsupported instead of UB
Andy Wang [Sun, 5 Jun 2022 21:11:55 +0000 (22:11 +0100)]
Make racy imperfectly overlapping atomic access unsupported instead of UB

Co-authored-by: Ralf Jung <post@ralfj.de>
2 years agoAdd more backgrounds on lazy store buffers
Andy Wang [Sun, 5 Jun 2022 20:48:07 +0000 (21:48 +0100)]
Add more backgrounds on lazy store buffers

Co-authored-by: Ralf Jung <post@ralfj.de>
2 years agoRemove unused lifetimes
Andy Wang [Sun, 5 Jun 2022 19:47:01 +0000 (20:47 +0100)]
Remove unused lifetimes