This will set up a rustup toolchain called `miri` and set it as an override for
the current directory.
-If you want to also have `clippy` installed, you need to run this:
-```
-./rustup-toolchain "" -c clippy
-```
+You can also create a `.auto-everything` file (contents don't matter, can be empty), which
+will cause any `./miri` command to automatically call `rustup-toolchain`, `clippy` and `rustfmt`
+for you. If you don't want all of these to happen, you can add individual `.auto-toolchain`,
+`.auto-clippy` and `.auto-fmt` files respectively.
[`rustup-toolchain-install-master`]: https://github.com/kennytm/rustup-toolchain-install-master
MIRI_TEST_TARGET=i686-unknown-linux-gnu ./miri test
```
+If your target doesn't support libstd, you can run miri with
+
+```
+MIRI_NO_STD=1 MIRI_TEST_TARGET=thumbv7em-none-eabihf ./miri test tests/fail/alloc/no_global_allocator.rs
+MIRI_NO_STD=1 ./miri run tests/pass/no_std.rs --target thumbv7em-none-eabihf
+```
+
+to avoid attempting (and failing) to build libstd. Note that almost no tests will pass
+this way, but you can run individual tests.
+
`./miri test FILTER` only runs those tests that contain `FILTER` in their
filename (including the base directory, e.g. `./miri test fail` will run all
compile-fail tests).
and then you can use it as if it was installed by `rustup`. Make sure you use
the same toolchain when calling `cargo miri` that you used when installing Miri!
+Usually this means you have to write `cargo +miri miri ...` to select the `miri`
+toolchain that was installed by `./rustup-toolchain`.
There's a test for the cargo wrapper in the `test-cargo-miri` directory; run
`./run-test.py` in there to execute it. Like `./miri test`, this respects the
clear the Miri build cache manually (on Linux, `rm -rf ~/.cache/miri`;
and on Windows, `rmdir /S "%LOCALAPPDATA%\rust-lang\miri\cache"`).
+### Benchmarking
+
+Miri comes with a few benchmarks; you can run `./miri bench` to run them with the locally built
+Miri. Note: this will run `./miri install` as a side-effect. Also requires `hyperfine` to be
+installed (`cargo install hyperfine`).
+
## Configuring `rust-analyzer`
To configure `rust-analyzer` and VS Code for working on Miri, save the following
```json
{
+ "rust-analyzer.rustc.source": "discover",
+ "rust-analyzer.linkedProjects": [
+ "./Cargo.toml",
+ "./cargo-miri/Cargo.toml"
+ ],
"rust-analyzer.checkOnSave.overrideCommand": [
+ "env",
+ "MIRI_AUTO_OPS=no",
"./miri",
"check",
"--message-format=json"
],
+ "rust-analyzer.buildScripts.overrideCommand": [
+ "env",
+ "MIRI_AUTO_OPS=no",
+ "./miri",
+ "check",
+ "--message-format=json",
+ ],
"rust-analyzer.rustfmt.extraArgs": [
"+nightly"
],
- "rust-analyzer.rustcSource": "discover",
- "rust-analyzer.linkedProjects": [
- "./Cargo.toml",
- "./cargo-miri/Cargo.toml"
- ]
}
```
rustup override set stage2
```
+Note: When you are working with a locally built rustc or any other toolchain that
+is not the same as the one in `rust-version`, you should not have `.auto-everything` or
+`.auto-toolchain` as that will keep resetting your toolchain.
+
+```
+rm -f .auto-everything .auto-toolchain
+```
+
Important: You need to delete the Miri cache when you change the stdlib; otherwise the
old, chached version will be used. On Linux, the cache is located at `~/.cache/miri`,
and on Windows, it is located at `%LOCALAPPDATA%\rust-lang\miri\cache`; the exact