Commit Graph

5038 Commits

Author SHA1 Message Date
Ralf Jung
e9e67c97cc cargo update main crates 2020-09-17 20:08:18 +02:00
bors
ce29fbf406 Auto merge of #1540 - RalfJung:cargo-miri-redone, r=oli-obk
Redo cargo-miri logic

This rewrite the cargo-miri logic for running the requested crate(s) following what we outlined in https://github.com/rust-lang/miri/issues/739: `cargo miri run/test $FLAGS` (almost) literally invokes `cargo run/test $FLAGS` but with some environment variables set so that we can control what happens:
* `RUSTC_WRAPPER` is set so that we get invoked instead of `rustc`. We use that power to mess with the flags being used for the build (things to be interpreted by Miri use a different sysroot), and when we are detecting a binary crate meant to be run by Miri, we grab the info we care about and put it into a JSON file for later use.
* `CARGO_TARGET_$TARGET_RUNNER` is set so what we get invoked when cargo wants to run a binary. At that point we take that JSON info from before and use it to invoke Miri.

Overall this works great! We get all sorts of cargo magic for free, and do not even need `cargo-metadata` any more. There's one annoying point though, which I have not managed to entirely work around yet: this means we are doing a full build, not just a check-build. Given that our sysroot is MIR-only, I was surprised that this even worked, but still -- this means we are doing more work than we should. So I also added some patching of arguments to make sure `--emit` does not contain `link`, and then more patching was required of the `--extern` flags for the binary because those referenced the `.rlib` files but now only `.rmeta` exists, and that is still not fully working because cargo seems to expect those `.rmeta` files and now triggers a rebuild each time as those files are still missing. My current plan is to make our wrapper create some empty dummy files with the right names, but the amount of hacks we are stacking on top of each other here is getting worrysome.^^ `@ehuss` your input would be welcome on this issue.

Due to re-using cargo more literally, this also changes flag parsing to match `cargo`. So `-Zmiri` flags now have to be passed via an environment variable (Cc https://github.com/rust-lang/miri/issues/1416).

This PR is not ready yet, but the parts that are there I think can be reviewed already. TODO:
* [x] [Fix Windows](https://github.com/rust-lang/miri/pull/1540#issuecomment-688733741).
* [x] Figure out how we can do check-only builds without the rebuild problem above. ~~I am also worried about cases where `build.rs` script might detect check-only builds and then do less work; I think some crates in rustc are doing that and if this is a thing in the wider ecosystem we need to find a way to support this as well.~~ (postponed that until we have a concrete example)
* [x] Currently cargo runs doctests as well, and they are not run in Miri. We should at least figure out a way to not run them at all (resolving https://github.com/rust-lang/miri/issues/584 is left for a future PR).
* [x] For some time, detect the old way of passing `-Zmiri` flags and warn that this will need updating. For some simple situations we can probably make it still support the old way, but I plan to remove those hacks after a bit. This is just to give people and me time to go around and send PRs to all projects that use Miri on CI, and update their use of the flags.
* [x] Add a test for stdin handling (https://github.com/rust-lang/miri/issues/1505). This should work now but we should be sure.
* [x] Add a test for cargo env vars (https://github.com/rust-lang/miri/issues/1515).
* [x] Check if https://github.com/rust-lang/miri/issues/1516 is resolved.
* [x] Check if https://github.com/rust-lang/miri/issues/1001 and https://github.com/rust-lang/miri/issues/1514 are resolved.
* [x] Check if https://github.com/rust-lang/miri/issues/1312 is resolved (not sure if it is wort adding a test).
* [x] Check if https://github.com/rust-lang/miri/issues/1512 is resolved (not sure if it is wort adding a test).

Fixes https://github.com/rust-lang/miri/issues/700.
Fixes https://github.com/rust-lang/miri/issues/739.
Fixes https://github.com/rust-lang/miri/issues/1001.
Fixes https://github.com/rust-lang/miri/issues/1312 (without a test, as we run without cargo's stdin/stdout wrapping now, as the test for stdin confirms).
Fixes https://github.com/rust-lang/miri/issues/1416.
Fixes https://github.com/rust-lang/miri/issues/1505.
Fixes https://github.com/rust-lang/miri/issues/1512 (without a test, as cargo now does all that handling anyway, which various other tests confirm).
Fixes https://github.com/rust-lang/miri/issues/1514.
Fixes https://github.com/rust-lang/miri/issues/1516.

Cc `@alecmocatta` who reported many of the bugs above; would be great if you could help with the tests e.g. by providing some small examples I could try.
r? `@oli-obk`
2020-09-17 16:52:23 +00:00
bors
79f023eeb1 Auto merge of #1547 - RalfJung:rustup, r=RalfJung
rustup; no need to special-case the guaranteed_eq/ne intrinsics any more
2020-09-17 15:43:29 +00:00
Ralf Jung
3163242ff1 rustup; no need to special-case the guaranteed_eq/ne intrinsics any more 2020-09-17 17:42:52 +02:00
Ralf Jung
ae859c3f7b add comment mentioning alternative approach 2020-09-17 17:33:47 +02:00
Ralf Jung
db067f4a3e test-cargo-miri: normalize slashes before comparing paths 2020-09-17 17:33:47 +02:00
Ralf Jung
05f5c3d078 make sure tests pass even with RUST_TEST_NOCAPTURE set 2020-09-17 17:33:47 +02:00
Ralf Jung
18483b4d5e make (not yet actually used) doctest actually use the crate, and fix a comment 2020-09-17 17:33:47 +02:00
Ralf Jung
f7612f71bc more consistent error capitalization 2020-09-17 17:33:47 +02:00
Ralf Jung
192b535adc cleaner output for cargo-miri-test harness 2020-09-17 17:33:47 +02:00
Ralf Jung
b244a2ddaa make sure subcrate tests have the right cwd 2020-09-17 17:33:47 +02:00
Ralf Jung
c99fb102b8 test 'cargo miri run' CWD, also for subcrate in a workspace 2020-09-17 17:33:47 +02:00
Ralf Jung
113a335c3e test propagating env vars from build.rs to binary 2020-09-17 17:33:47 +02:00
Ralf Jung
33c669679e test 'harness=false' tests 2020-09-17 17:33:47 +02:00
Ralf Jung
174a92c39a detect when the user passes Miri's flags the old way, and support this for now 2020-09-17 17:33:47 +02:00
Ralf Jung
93bedd0a09 fix cargo-miri-test for cross-runs 2020-09-17 17:33:47 +02:00
Ralf Jung
2205ed5bbb show proper warning about not running doctests 2020-09-17 17:33:47 +02:00
Ralf Jung
ba3b354af9 update comment
Co-authored-by: Oli Scherer <github35764891676564198441@oli-obk.de>
2020-09-17 17:33:47 +02:00
Ralf Jung
504c617cd4 test reading from stdin 2020-09-17 17:33:47 +02:00
Ralf Jung
74fdb5cf2c patch away --error-format and --json so that errors are rendered properly 2020-09-17 17:33:47 +02:00
Ralf Jung
119bf4d607 forward build-time env vars to binary, and test that we do 2020-09-17 17:33:46 +02:00
Ralf Jung
10f58b3eab fix Miri script on macOS 2020-09-17 17:29:19 +02:00
Ralf Jung
c793d6036a handle binary suffices (for Windows); stop deleting fake binary 2020-09-17 17:29:19 +02:00
Ralf Jung
53eab7195a make our filename handling work better across platforms 2020-09-17 17:29:19 +02:00
Ralf Jung
147330cc36 even when not linking, create stub .rlib files to fool cargo 2020-09-17 17:29:19 +02:00
Ralf Jung
0019fe2459 fix typo
Co-authored-by: Oli Scherer <github35764891676564198441@oli-obk.de>
2020-09-17 17:29:19 +02:00
Ralf Jung
9a9988a4b0 update docs, and also use MIRIFLAGS for the test suite 2020-09-17 17:29:19 +02:00
Ralf Jung
ee7d589530 test respecting 'test=false', and what happens with doctests 2020-09-17 17:29:19 +02:00
Ralf Jung
c41a039c56 patch --extern and --emit; test suite passes now! 2020-09-17 17:29:19 +02:00
Ralf Jung
7ee2729824 it actually runs tests now! 2020-09-17 17:29:19 +02:00
Ralf Jung
e2119dc94d stub JSON information flow from cargo-build-time to run-time 2020-09-17 17:29:19 +02:00
Ralf Jung
16afe1a234 towards letting cargo do binary selection: wrappers and runners set up 2020-09-17 17:29:19 +02:00
Ralf Jung
2b3b83eb2c canonicalize miri's directory 2020-09-17 17:29:19 +02:00
bors
09e6ccc580 Auto merge of #1546 - Aaron1011:fix/windows-panic, r=RalfJung
Enable some panic tests on Windows
2020-09-17 13:49:44 +00:00
Aaron Hill
93c31e7790
Enable some panic tests on Windows 2020-09-17 09:42:04 -04:00
bors
8b4b0b4a54 Auto merge of #1545 - RalfJung:azure-ci, r=RalfJung
also detect Azure CI environments

Cc `@sunjay`
2020-09-13 19:59:14 +00:00
Ralf Jung
ebc3b71881 also detect Azure CI environments 2020-09-13 21:10:29 +02:00
bors
2249c10507 Auto merge of #1543 - RalfJung:btree, r=RalfJung
test BTreeMap::drain_filter for leaks
2020-09-11 10:20:52 +00:00
Ralf Jung
bc548d3004 test BTreeMap::drain_filter for leaks 2020-09-11 12:20:08 +02:00
bors
a6741b0592 Auto merge of #1541 - RalfJung:rustup, r=RalfJung
Rustup, expand collection tests
2020-09-10 06:45:44 +00:00
Ralf Jung
e61be0b8b8 expand collection tests 2020-09-10 08:44:27 +02:00
Ralf Jung
bea2d7bb55 rustup 2020-09-10 08:38:30 +02:00
bors
dc0a54c862 Auto merge of #1511 - samrat:more-fd-trait-ops, r=RalfJung
Implement dup and close for stdin/stdout/stderr

Implements some of the operations for stdin/out/err, towards #1499
2020-09-09 17:58:08 +00:00
Samrat Man Singh
563fb8e43d Implement dup and close for stdin/stdout/stderr
Support F_DUPFD on stdin/stdout/stderr

Enable `close`-ing stdin/stdout/stderr

For `dup`, check if FD is `File` first

If not, clone the appropriate standard IO stream

Merge POSIX `close` and `dup` tests into same module

Also, add assertion that `write` on a closed FD returns an error.

Add `dup` as FileDescriptor trait fn

Also:
- Fix `close` so it drops `self` instead of reference to it
- Remove FD clamping in insert_fd_with_min_fd, since FDs 0-2 can be
closed

Fix fs_libc tests

Make error message when closing stdin/out/err more specific

Return io::Result from `FileDescriptor::dup`

Change error message when closing stdin/out/err

Refactor `FileDescriptor::dup` impl for `FileHandle`

Remove empty line
2020-09-09 23:26:33 +05:30
bors
604a674ea3 Auto merge of #1536 - divergentdave:nanosleep, r=RalfJung
Nanosleep

This PR adds a shim for `libc::nanosleep`, (available under -Zmiri-disable-isolation only) which backs `thread::sleep` on Linux and macOS. I started off by extracting the `timespec` parsing from the `pthread_cond_timedwait` shim into a helper method, and adding checks for invalid values. The second commit adds the new shim and a small test. The shim blocks the current thread, and registers a timeout callback to unblock the thread again, using the same method as `pthread_cond_timedwait` does.
2020-09-08 08:26:33 +00:00
David Cook
b06f0d16a9 Use try block instead of closure 2020-09-07 15:09:34 -05:00
David Cook
06aaea1d6b Update comment 2020-09-07 15:05:26 -05:00
David Cook
597360f499 Simplify read_timespec error handling 2020-09-07 11:31:28 -05:00
David Cook
33e928c9ca Review comments 2020-09-07 10:54:39 -05:00
bors
3bc1136600 Auto merge of #1539 - RalfJung:issue, r=RalfJung
float test case: fix referenced issue
2020-09-07 11:11:03 +00:00