-# Miri
+# Miri [[slides](https://solson.me/miri-slides.pdf)] [[report](https://solson.me/miri-report.pdf)] [![Build Status](https://travis-ci.org/solson/miri.svg?branch=master)](https://travis-ci.org/solson/miri) [![Windows build status](https://ci.appveyor.com/api/projects/status/github/solson/miri?svg=true)](https://ci.appveyor.com/project/solson63299/miri)
-[[slides](https://solson.me/miri-slides.pdf)]
-[[report](https://solson.me/miri-report.pdf)]
An experimental interpreter for [Rust][rust]'s [mid-level intermediate
representation][mir] (MIR). This project began as part of my work for the
undergraduate research course at the [University of Saskatchewan][usask].
-[![Build Status](https://travis-ci.org/solson/miri.svg?branch=master)](https://travis-ci.org/solson/miri)
-
## Installing Rust
I recommend that you install [rustup][rustup] and then use it to install the
You should also make `nightly` the default version for your Miri directory by
running the following command while you're in it. If you don't do this, you can
-run the later `cargo` commands by prefixing them with `rustup run nightly`.
+run the later `cargo` commands by using `cargo +nightly` instead.
```sh
rustup override add nightly
## Running tests
```sh
-cargo run tests/run-pass/vecs.rs # Or whatever test you like.
+cargo run --bin miri tests/run-pass-fullmir/vecs.rs # Or whatever test you like.
```
## Debugging
-You can get detailed, statement-by-statement traces by setting the `MIRI_RUN`
+You can get detailed, statement-by-statement traces by setting the `MIRI_LOG`
environment variable to `trace`. These traces are indented based on call stack
depth. You can get a much less verbose set of information with other logging
levels such as `warn`.
+## Running miri on your own project('s test suite)
+
+Install miri as a cargo subcommand with `cargo install --debug`.
+Then, inside your own project, use `cargo +nightly miri` to run your project, if it is
+a bin project, or run `cargo +nightly miri test` to run all tests in your project
+through miri.
+
+## Running miri with full libstd
+
+Per default libstd does not contain the MIR of non-polymorphic functions. When
+miri hits a call to such a function, execution terminates. To fix this, it is
+possible to compile libstd with full MIR:
+
+```sh
+rustup component add rust-src
+cargo install xargo
+cd xargo/
+RUSTFLAGS='-Zalways-encode-mir' xargo build
+```
+
+Now you can run miri against the libstd compiled by xargo:
+
+```sh
+MIRI_SYSROOT=~/.xargo/HOST cargo run --bin miri tests/run-pass-fullmir/vecs.rs
+```
+
+Notice that you will have to re-run the last step of the preparations above when
+your toolchain changes (e.g., when you update the nightly).
+
## Contributing and getting help
Check out the issues on this GitHub repository for some ideas. There's lots that
needs to be done that I haven't documented in the issues yet, however. For more
ideas or help with running or hacking on Miri, you can contact me (`scott`) on
-Mozilla IRC in any of the Rust IRC channels (`#rust`, `#rust-offtopic`, etc).`
+Mozilla IRC in any of the Rust IRC channels (`#rust`, `#rust-offtopic`, etc).
## License