]> git.lizzy.rs Git - rust.git/log
rust.git
3 years agomore punctuation
Ralf Jung [Sun, 4 Oct 2020 21:07:19 +0000 (23:07 +0200)]
more punctuation

3 years agoProperly capitalize PathConversion
Aaron Hill [Sun, 4 Oct 2020 20:28:09 +0000 (16:28 -0400)]
Properly capitalize PathConversion

3 years agoNormalize MIRI_TEMP before using it
Aaron Hill [Sun, 4 Oct 2020 20:26:09 +0000 (16:26 -0400)]
Normalize MIRI_TEMP before using it

3 years agoMove `convert_path_separator` to trait and use it in `readlink`
Aaron Hill [Sun, 4 Oct 2020 16:34:13 +0000 (12:34 -0400)]
Move `convert_path_separator` to trait and use it in `readlink`

3 years agoSwap order of assertions for easier debugging
Aaron Hill [Sun, 4 Oct 2020 13:41:15 +0000 (09:41 -0400)]
Swap order of assertions for easier debugging

3 years agoMake helper functions freestanding
Aaron Hill [Sun, 4 Oct 2020 12:00:26 +0000 (08:00 -0400)]
Make helper functions freestanding

3 years agoAdd trailing punctuation
Aaron Hill [Sat, 3 Oct 2020 16:59:23 +0000 (12:59 -0400)]
Add trailing punctuation

Co-authored-by: Ralf Jung <post@ralfj.de>
3 years agoMerge `fs` and `fs_libc` tests
Aaron Hill [Sat, 3 Oct 2020 16:56:32 +0000 (12:56 -0400)]
Merge `fs` and `fs_libc` tests

3 years agoUse panicking coversions instead of `as`
Aaron Hill [Sat, 3 Oct 2020 16:52:06 +0000 (12:52 -0400)]
Use panicking coversions instead of `as`

3 years agoMove some helper functions around
Aaron Hill [Sat, 3 Oct 2020 16:51:46 +0000 (12:51 -0400)]
Move some helper functions around

3 years agoImplement `readlink`
Aaron Hill [Mon, 28 Sep 2020 19:02:54 +0000 (15:02 -0400)]
Implement `readlink`

Due to the truncating behavior of `readlink`, I was not able to
directly use any of the existing C-cstring helper functions.

3 years agoAuto merge of #1563 - lzutao:dummy-actions, r=RalfJung
bors [Sun, 4 Oct 2020 13:14:43 +0000 (13:14 +0000)]
Auto merge of #1563 - lzutao:dummy-actions, r=RalfJung

Add a dummy actions template to enable it on CI

I already had a complete template to transition from Travis and Appveyor.
Since actions will not run on repo haven't enabled it before.
I have this dummy template first to enable it on default branch.
We should address a few todo here, merge it and I will send another patch
to complete the migration.

3 years agoAdd a dummy actions template to enable it on CI
Lzu Tao [Sun, 4 Oct 2020 11:53:13 +0000 (18:53 +0700)]
Add a dummy actions template to enable it on CI

3 years agoAuto merge of #1570 - RalfJung:syscalls, r=RalfJung
bors [Sat, 3 Oct 2020 15:49:15 +0000 (15:49 +0000)]
Auto merge of #1570 - RalfJung:syscalls, r=RalfJung

check that all syscall arguments are scalars

`@m-ou-se` do you think this check makes sense?

The `abi` of a layout contains everything needed for the calling convention (as far as I know), so this should ensure that all the ignored arguments are passed like integers and do not otherwise mess up argument passing.

The one thing I am not sure about is what happens when more arguments are passed than fit in registers. The `syscall` man page says that all calling conventions support at least 6 arguments, except for "mips/o32" where it says that
```
       [1] The mips/o32 system call convention passes arguments 5 through 8 on the user stack.
```
If we assume that passing these extra arguments to futex is legal even with that calling convention, that would mean that those user stack arguments are just silently ignored as well, which seems plausible to me -- but I know very little about calling conventions.

3 years agocheck that all syscall arguments are scalars
Ralf Jung [Sat, 3 Oct 2020 14:01:53 +0000 (16:01 +0200)]
check that all syscall arguments are scalars

3 years agoAuto merge of #1569 - RalfJung:rustup, r=RalfJung
bors [Sat, 3 Oct 2020 13:28:37 +0000 (13:28 +0000)]
Auto merge of #1569 - RalfJung:rustup, r=RalfJung

bump Rust version and a bit of cleanup

3 years agomerge parking test into general synchronization test
Ralf Jung [Sat, 3 Oct 2020 13:27:23 +0000 (15:27 +0200)]
merge parking test into general synchronization test

3 years agoadd backtics back in isolation error message
Ralf Jung [Sat, 3 Oct 2020 13:20:16 +0000 (15:20 +0200)]
add backtics back in isolation error message

3 years agorustup
Ralf Jung [Sat, 3 Oct 2020 13:19:57 +0000 (15:19 +0200)]
rustup

3 years agoAuto merge of #1568 - fusion-engineering-forks:futex, r=RalfJung
bors [Sat, 3 Oct 2020 12:36:03 +0000 (12:36 +0000)]
Auto merge of #1568 - fusion-engineering-forks:futex, r=RalfJung

Implement futex_wait and futex_wake.

Fixes https://github.com/rust-lang/rust/issues/77406 and fixes #1562.

This makes std's park(), park_timeout(), and unpark() work. That means std::sync::Once is usable again and the test pass again with the latest rustc.

This also makes parking_lot work.

3 years agoAdd FIXME about type of `addr` in futex implementation.
Mara Bos [Sat, 3 Oct 2020 12:32:30 +0000 (14:32 +0200)]
Add FIXME about type of `addr` in futex implementation.

Co-authored-by: Ralf Jung <post@ralfj.de>
3 years agoAdd note about use of force_ptr in futex implementation.
Mara Bos [Sat, 3 Oct 2020 12:21:37 +0000 (14:21 +0200)]
Add note about use of force_ptr in futex implementation.

Co-authored-by: Ralf Jung <post@ralfj.de>
3 years agoUpdate syscall FIXME to include note about 'wrong' types.
Mara Bos [Sat, 3 Oct 2020 11:39:16 +0000 (13:39 +0200)]
Update syscall FIXME to include note about 'wrong' types.

3 years agoAdd test for futex syscall.
Mara Bos [Sat, 3 Oct 2020 11:09:11 +0000 (13:09 +0200)]
Add test for futex syscall.

3 years agoAdd FIXME note about variadic syscall().
Mara Bos [Sat, 3 Oct 2020 10:18:38 +0000 (12:18 +0200)]
Add FIXME note about variadic syscall().

3 years agoUse read_scalar_at_offset in futex_wait instead of memory.get_raw.
Mara Bos [Sat, 3 Oct 2020 10:11:24 +0000 (12:11 +0200)]
Use read_scalar_at_offset in futex_wait instead of memory.get_raw.

3 years agoUpdate expected error messages in tests.
Mara Bos [Sat, 3 Oct 2020 10:00:29 +0000 (12:00 +0200)]
Update expected error messages in tests.

3 years agoRemove backtics from isolation error.
Mara Bos [Sat, 3 Oct 2020 09:38:16 +0000 (11:38 +0200)]
Remove backtics from isolation error.

Otherwise `FUTEX_WAIT with timeout` will look weird.

3 years agoOnly allow FUTEX_WAIT with timeout when isoloation is disabled.
Mara Bos [Sat, 3 Oct 2020 09:35:13 +0000 (11:35 +0200)]
Only allow FUTEX_WAIT with timeout when isoloation is disabled.

3 years agoUse correct return type for syscall(SYS_futex).
Mara Bos [Fri, 2 Oct 2020 22:40:53 +0000 (00:40 +0200)]
Use correct return type for syscall(SYS_futex).

3 years agoAdd park/park_timeout/unpark test.
Mara Bos [Fri, 2 Oct 2020 21:35:00 +0000 (23:35 +0200)]
Add park/park_timeout/unpark test.

3 years agoImplement timeouts for FUTEX_WAIT.
Mara Bos [Fri, 2 Oct 2020 21:34:14 +0000 (23:34 +0200)]
Implement timeouts for FUTEX_WAIT.

3 years agoUse force_ptr in futex implementation.
Mara Bos [Fri, 2 Oct 2020 19:59:11 +0000 (21:59 +0200)]
Use force_ptr in futex implementation.

3 years agoAdd note about arguments in futex implementation.
Mara Bos [Fri, 2 Oct 2020 18:56:01 +0000 (20:56 +0200)]
Add note about arguments in futex implementation.

Co-authored-by: Ralf Jung <post@ralfj.de>
3 years agoUpdate note about number of arguments to SYS_futex.
Mara Bos [Fri, 2 Oct 2020 18:53:31 +0000 (20:53 +0200)]
Update note about number of arguments to SYS_futex.

3 years agoAdd comments that document SYS_futex better.
Mara Bos [Fri, 2 Oct 2020 08:47:53 +0000 (10:47 +0200)]
Add comments that document SYS_futex better.

3 years agoImprove handling of the `addr` argument in SYS_futex.
Mara Bos [Fri, 2 Oct 2020 08:47:36 +0000 (10:47 +0200)]
Improve handling of the `addr` argument in SYS_futex.

3 years agoCheck maximum amount of arguments to SYS_futex.
Mara Bos [Fri, 2 Oct 2020 08:46:57 +0000 (10:46 +0200)]
Check maximum amount of arguments to SYS_futex.

3 years agoReturn correct value from futex_wait.
Mara Bos [Thu, 1 Oct 2020 23:49:20 +0000 (01:49 +0200)]
Return correct value from futex_wait.

3 years agoOnly check futex pointer in futex_wait and not in futex_wake.
Mara Bos [Thu, 1 Oct 2020 20:57:27 +0000 (22:57 +0200)]
Only check futex pointer in futex_wait and not in futex_wake.

futex_wake doesn't access the futex itself, so should accept pointers to
memory that's no longer there.

3 years agoErase tag from futex pointers.
Mara Bos [Thu, 1 Oct 2020 19:06:16 +0000 (21:06 +0200)]
Erase tag from futex pointers.

3 years agoMove futex syscall to its own file.
Mara Bos [Thu, 1 Oct 2020 19:03:36 +0000 (21:03 +0200)]
Move futex syscall to its own file.

3 years agoImplement futex_wait and futex_wake.
Mara Bos [Thu, 1 Oct 2020 18:47:31 +0000 (20:47 +0200)]
Implement futex_wait and futex_wake.

This does not support futex_wait with a timeout yet.

3 years agoAuto merge of #1566 - RalfJung:backtrace, r=RalfJung
bors [Wed, 30 Sep 2020 08:03:14 +0000 (08:03 +0000)]
Auto merge of #1566 - RalfJung:backtrace, r=RalfJung

normalize backtrace stderr even more

The test previously failed on rustc CI with this diff:
```
 $DIR/backtrace-api.rs:21:59 (func_c)
 $DIR/backtrace-api.rs:20:53 (func_b)
 $DIR/backtrace-api.rs:19:50 (func_a)
 $DIR/backtrace-api.rs:25:18 (main)
-RUSTLIB/src/rust/library/core/src/ops/function.rs:LL:COL (<fn() as std::ops::FnOnce<()>>::call_once - shim(fn()))
-RUSTLIB/src/rust/library/std/src/sys_common/backtrace.rs:LL:COL (std::sys_common::backtrace::__rust_begin_short_backtrace)
-RUSTLIB/src/rust/library/std/src/rt.rs:LL:COL (std::rt::lang_start::{closure#0})
-RUSTLIB/src/rust/library/core/src/ops/function.rs:LL:COL (std::ops::function::impls::call_once)
-RUSTLIB/src/rust/library/std/src/panicking.rs:LL:COL (std::panicking::r#try::do_call)
-RUSTLIB/src/rust/library/std/src/panicking.rs:LL:COL (std::panicking::r#try)
-RUSTLIB/src/rust/library/std/src/panic.rs:LL:COL (std::panic::catch_unwind)
-RUSTLIB/src/rust/library/std/src/rt.rs:LL:COL (std::rt::lang_start_internal)
-RUSTLIB/src/rust/library/std/src/rt.rs:LL:COL (std::rt::lang_start)
+/checkout/library/core/src/ops/function.rs:227:5 (<fn() as std::ops::FnOnce<()>>::call_once - shim(fn()))
+/checkout/library/std/src/sys_common/backtrace.rs:137:18 (std::sys_common::backtrace::__rust_begin_short_backtrace)
+/checkout/library/std/src/rt.rs:66:18 (std::rt::lang_start::{closure#0})
+/checkout/library/core/src/ops/function.rs:259:13 (std::ops::function::impls::call_once)
+/checkout/library/std/src/panicking.rs:381:40 (std::panicking::r#try::do_call)
+/checkout/library/std/src/panicking.rs:345:19 (std::panicking::r#try)
+/checkout/library/std/src/panic.rs:382:14 (std::panic::catch_unwind)
+/checkout/library/std/src/rt.rs:51:25 (std::rt::lang_start_internal)
+/checkout/library/std/src/rt.rs:65:5 (std::rt::lang_start)
```
Cc `@Aaron1011`

3 years agonormalize backtrace stderr even more
Ralf Jung [Wed, 30 Sep 2020 07:59:28 +0000 (09:59 +0200)]
normalize backtrace stderr even more

3 years agoAuto merge of #1565 - RalfJung:rustup, r=RalfJung
bors [Tue, 29 Sep 2020 09:05:35 +0000 (09:05 +0000)]
Auto merge of #1565 - RalfJung:rustup, r=RalfJung

rustup; adjust for rustc_driver changes

3 years agorustup; adjust for rustc_driver changes
Ralf Jung [Tue, 29 Sep 2020 08:31:41 +0000 (10:31 +0200)]
rustup; adjust for rustc_driver changes

3 years agoAuto merge of #1559 - Aaron1011:new-miri-backtrace, r=RalfJung
bors [Mon, 28 Sep 2020 19:16:50 +0000 (19:16 +0000)]
Auto merge of #1559 - Aaron1011:new-miri-backtrace, r=RalfJung

Add API for capturing backtrace

This PR adds two new Miri-defined extern functions:
`miri_get_backtrace` and `miri_resolve_frame`, which are documented in
the README. Together, they allow obtaining a backtrace for the currently
executing program.

I've added a test showing how these APIs are used. I've also prepared a
companion PR `backtrace-rs`, which will allow
`backtrace::Backtrace::new()` to work automatically under Miri.

Once these two PRs are merged, we will be able to print backtraces from
the normal Rust panic hook (since libstd is now using backtrace-rs).

A few notes:
* Resolving the backtrace frames is *very* slow - you can actually see
  each line being printed out one at a time. Some local testing showed
  that this is not (primrary) caused by resolving a `Span` - it seems
  to be just Miri being slow.
* For the first time, we now interact directly with a user-defined
  struct (instead of just executing the user-provided MIR that
  manipulates the struct). To allow for future changes, I've added
  a 'version' parameter (currently required to be 0). This should allow
  us to change the `MiriFrame` struct should the need ever arise.
* I used the approach suggested by `@oli-obk` - a returned backtrace
  pointer consists of a base function allocation, with the 'offset'
  used to encode the `Span.lo`. This allows losslessly reconstructing
  the location information in `miri_resolve_frame`.
* There are a few quirks on the `backtrace-rs` side:
  * `backtrace-rs` calls `getcwd()` by default to try to simplify
    the filename. This results in an isolation error by default,
    which could be annoying when printing a backtrace from libstd.
  * `backtrace-rs` tries to remove 'internal' frames (everything between
     the call to `Backtrace::new()` and the internal API call made by
     backtrace-rs) by comparing the returned frame pointer value to
     a Rust function pointer. This doesn't work due to the way we
     construct the frame pointers passed to the caller. We could
     attempt to support this kind of comparison, or just add a
    `#[cfg(miri)]` and ignore the frames ourselves.

3 years agoNormalize out generic arguments in backtrace-api stderr
Aaron Hill [Mon, 28 Sep 2020 17:55:23 +0000 (13:55 -0400)]
Normalize out generic arguments in backtrace-api stderr

3 years agofix typo
Ralf Jung [Mon, 28 Sep 2020 17:34:18 +0000 (19:34 +0200)]
fix typo

3 years agoRequire #[repr(C)] on MiriFrame
Aaron Hill [Sat, 26 Sep 2020 18:40:41 +0000 (14:40 -0400)]
Require #[repr(C)] on MiriFrame

3 years agoApply #[inline(never)] to functions that we want in the backtrace
Aaron Hill [Fri, 25 Sep 2020 03:00:32 +0000 (23:00 -0400)]
Apply #[inline(never)] to functions that we want in the backtrace

3 years agoUpdate README
Aaron Hill [Thu, 24 Sep 2020 23:10:09 +0000 (19:10 -0400)]
Update README

3 years agoMake some error messages lowercase
Aaron Hill [Thu, 24 Sep 2020 23:10:02 +0000 (19:10 -0400)]
Make some error messages lowercase

3 years agoExplain encoding scheme
Aaron Hill [Thu, 24 Sep 2020 23:06:39 +0000 (19:06 -0400)]
Explain encoding scheme

3 years agoMove things around
Aaron Hill [Thu, 24 Sep 2020 22:52:17 +0000 (18:52 -0400)]
Move things around

3 years agoPrint non-std frames to stdout in `backtrace-api` test
Aaron Hill [Thu, 24 Sep 2020 19:05:50 +0000 (15:05 -0400)]
Print non-std frames to stdout in `backtrace-api` test

3 years agoUse a 'flags' parameter instead of 'version'
Aaron Hill [Thu, 24 Sep 2020 18:18:47 +0000 (14:18 -0400)]
Use a 'flags' parameter instead of 'version'

3 years agoNormalize line and column numbers from the sysroot
Aaron Hill [Tue, 22 Sep 2020 14:58:18 +0000 (10:58 -0400)]
Normalize line and column numbers from the sysroot

3 years agoAdd API for capturing backtrace
Aaron Hill [Tue, 3 Dec 2019 02:15:58 +0000 (21:15 -0500)]
Add API for capturing backtrace

This PR adds two new Miri-defined extern functions:
`miri_get_backtrace` and `miri_resolve_frame`, which are documented in
the README. Together, they allow obtaining a backtrace for the currently
executing program.

I've added a test showing how these APIs are used. I've also prepared a
companion PR `backtrace-rs`, which will allow
`backtrace::Backtrace::new()` to work automatically under Miri.

Once these two PRs are merged, we will be able to print backtraces from
the normal Rust panic hook (since libstd is now using backtrace-rs).

A few notes:
* Resolving the backtrace frames is *very* slow - you can actually see
  each line being printed out one at a time. Some local testing showed
  that this is not (primrary) caused by resolving a `Span` - it seems
  to be just Miri being slow.
* For the first time, we now interact directly with a user-defined
  struct (instead of just executing the user-provided MIR that
  manipulates the struct). To allow for future changes, I've added
  a 'version' parameter (currently required to be 0). This should allow
  us to change the `MiriFrame` struct should the need ever arise.
* I used the approach suggested by @oli-obk - a returned backtrace
  pointer consists of a base function allocation, with the 'offset'
  used to encode the `Span.lo`. This allows losslessly reconstructing
  the location information in `miri_resolve_frame`.
* There are a few quirks on the `backtrace-rs` side:
  * `backtrace-rs` calls `getcwd()` by default to try to simplify
    the filename. This results in an isolation error by default,
    which could be annoying when printing a backtrace from libstd.
  * `backtrace-rs` tries to remove 'internal' frames (everything between
     the call to `Backtrace::new()` and the internal API call made by
     backtrace-rs) by comparing the returned frame pointer value to
     a Rust function pointer. This doesn't work due to the way we
     construct the frame pointers passed to the caller. We could
     attempt to support this kind of comparison, or just add a
    `#[cfg(miri)]` and ignore the frames ourselves.

3 years agoAuto merge of #1555 - lzutao:upstream-assume-const, r=RalfJung
bors [Sun, 27 Sep 2020 08:31:09 +0000 (08:31 +0000)]
Auto merge of #1555 - lzutao:upstream-assume-const, r=RalfJung

Remove assume intrinsic from EvalContextExt

Waiting for https://github.com/rust-lang/rust/pull/76973 merged.

3 years agoRemove assume intrinsic from EvalContextExt
Lzu Tao [Sun, 27 Sep 2020 03:00:06 +0000 (10:00 +0700)]
Remove assume intrinsic from EvalContextExt

It has been moved to rustc_mir.

3 years agoAuto merge of #1561 - RalfJung:rustup, r=RalfJung
bors [Thu, 24 Sep 2020 07:19:39 +0000 (07:19 +0000)]
Auto merge of #1561 - RalfJung:rustup, r=RalfJung

rustup; fix tests

3 years agorustup; fix tests
Ralf Jung [Thu, 24 Sep 2020 07:19:03 +0000 (09:19 +0200)]
rustup; fix tests

3 years agoAuto merge of #1560 - RalfJung:rustup, r=RalfJung
bors [Wed, 23 Sep 2020 20:13:59 +0000 (20:13 +0000)]
Auto merge of #1560 - RalfJung:rustup, r=RalfJung

opt-level 3 is clean again :)

3 years agoopt-level 3 is clean again :)
Ralf Jung [Wed, 23 Sep 2020 20:13:13 +0000 (22:13 +0200)]
opt-level 3 is clean again :)

3 years agoAuto merge of #1558 - RalfJung:serde_derive, r=RalfJung
bors [Mon, 21 Sep 2020 13:48:15 +0000 (13:48 +0000)]
Auto merge of #1558 - RalfJung:serde_derive, r=RalfJung

test formerly broken serde_derive dependency

Adds a test for the issue fixed in https://github.com/rust-lang/miri/pull/1557

3 years agotest formerly broken serde_derive dependency
Ralf Jung [Mon, 21 Sep 2020 13:47:09 +0000 (15:47 +0200)]
test formerly broken serde_derive dependency

3 years agoAuto merge of #1557 - RalfJung:cargo-miri, r=RalfJung
bors [Mon, 21 Sep 2020 10:47:26 +0000 (10:47 +0000)]
Auto merge of #1557 - RalfJung:cargo-miri, r=RalfJung

support non-rlib extern files

This came up in https://github.com/hsivonen/encoding_rs/pull/57.

3 years agosupport non-rlib extern files
Ralf Jung [Mon, 21 Sep 2020 10:46:18 +0000 (12:46 +0200)]
support non-rlib extern files

3 years agoAuto merge of #1556 - RalfJung:compat, r=RalfJung
bors [Mon, 21 Sep 2020 07:11:37 +0000 (07:11 +0000)]
Auto merge of #1556 - RalfJung:compat, r=RalfJung

also support old 'cargo miri run -- -- args' style

I forgot this in https://github.com/rust-lang/miri/pull/1540. Again this is just temporary, for backwards compatibility.

3 years agoalso support old 'cargo miri run -- -- args' style
Ralf Jung [Mon, 21 Sep 2020 07:10:04 +0000 (09:10 +0200)]
also support old 'cargo miri run -- -- args' style

3 years agoAuto merge of #1554 - RalfJung:rustup, r=RalfJung
bors [Sun, 20 Sep 2020 13:56:59 +0000 (13:56 +0000)]
Auto merge of #1554 - RalfJung:rustup, r=RalfJung

rustup; support panic=abort on Windows

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

3 years agorustup; support panic=abort on Windows
Ralf Jung [Sun, 20 Sep 2020 13:55:36 +0000 (15:55 +0200)]
rustup; support panic=abort on Windows

3 years agoAuto merge of #1553 - RalfJung:rustup, r=RalfJung
bors [Sun, 20 Sep 2020 11:14:29 +0000 (11:14 +0000)]
Auto merge of #1553 - RalfJung:rustup, r=RalfJung

rustup

Cc `@oli-obk`

3 years agorustup
Ralf Jung [Sun, 20 Sep 2020 11:13:57 +0000 (13:13 +0200)]
rustup

3 years agoAuto merge of #1552 - RalfJung:rustup, r=RalfJung
bors [Sun, 20 Sep 2020 10:18:29 +0000 (10:18 +0000)]
Auto merge of #1552 - RalfJung:rustup, r=RalfJung

rustup; make sure the generator moves even with smarter optimizations

3 years agoaccount for mir-opts masking more errors
Ralf Jung [Sun, 20 Sep 2020 10:02:04 +0000 (12:02 +0200)]
account for mir-opts masking more errors

3 years agorustup; make sure the iterator moves even with smarter optimizations
Ralf Jung [Sun, 20 Sep 2020 08:26:22 +0000 (10:26 +0200)]
rustup; make sure the iterator moves even with smarter optimizations

3 years agoAuto merge of #1551 - RalfJung:readme, r=RalfJung
bors [Sat, 19 Sep 2020 09:40:24 +0000 (09:40 +0000)]
Auto merge of #1551 - RalfJung:readme, r=RalfJung

list two more aliasing problems we found in BTreeMap and VecDeque

3 years agolist two more aliasing problems we found in BTreeMap and VecDeque
Ralf Jung [Sat, 19 Sep 2020 09:37:56 +0000 (11:37 +0200)]
list two more aliasing problems we found in BTreeMap and VecDeque

3 years agoAuto merge of #1549 - RalfJung:panic-abort, r=oli-obk
bors [Fri, 18 Sep 2020 11:41:04 +0000 (11:41 +0000)]
Auto merge of #1549 - RalfJung:panic-abort, r=oli-obk

support panic=abort

This adds support for abort-on-panic (https://github.com/rust-lang/miri/issues/1058). To achieve this, we insert `cargo-miri` as `RUSTC` when building the standard library, and patch the rustc flags in a way similar to what bootstrap does.

However, this is currently not supported on Windows as the Windows code uses inline assembly to cause an abort (?!?). I'll submit a rustc PR with some `cffg(miri)` to make that work. (EDIT: that would be https://github.com/rust-lang/rust/pull/76871)

Cc `@Aaron1011` r? `@oli-obk`

3 years agofmt
Ralf Jung [Fri, 18 Sep 2020 11:34:25 +0000 (13:34 +0200)]
fmt

Co-authored-by: Oli Scherer <github35764891676564198441@oli-obk.de>
3 years agosupport panic=abort
Ralf Jung [Fri, 18 Sep 2020 11:10:18 +0000 (13:10 +0200)]
support panic=abort

3 years agoAuto merge of #1548 - RalfJung:update, r=RalfJung
bors [Fri, 18 Sep 2020 10:19:04 +0000 (10:19 +0000)]
Auto merge of #1548 - RalfJung:update, r=RalfJung

Update dependencies

3 years agoupdate for major version bumps
Ralf Jung [Fri, 18 Sep 2020 10:17:09 +0000 (12:17 +0200)]
update for major version bumps

3 years ago'cargo update' test-cargo-miri
Ralf Jung [Fri, 18 Sep 2020 10:12:02 +0000 (12:12 +0200)]
'cargo update' test-cargo-miri

3 years agocargo update main crates
Ralf Jung [Thu, 17 Sep 2020 18:08:18 +0000 (20:08 +0200)]
cargo update main crates

3 years agoAuto merge of #1540 - RalfJung:cargo-miri-redone, r=oli-obk
bors [Thu, 17 Sep 2020 16:52:23 +0000 (16:52 +0000)]
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`

3 years agoAuto merge of #1547 - RalfJung:rustup, r=RalfJung
bors [Thu, 17 Sep 2020 15:43:29 +0000 (15:43 +0000)]
Auto merge of #1547 - RalfJung:rustup, r=RalfJung

rustup; no need to special-case the guaranteed_eq/ne intrinsics any more

3 years agorustup; no need to special-case the guaranteed_eq/ne intrinsics any more
Ralf Jung [Thu, 17 Sep 2020 15:42:52 +0000 (17:42 +0200)]
rustup; no need to special-case the guaranteed_eq/ne intrinsics any more

3 years agoadd comment mentioning alternative approach
Ralf Jung [Wed, 16 Sep 2020 17:54:52 +0000 (19:54 +0200)]
add comment mentioning alternative approach

3 years agotest-cargo-miri: normalize slashes before comparing paths
Ralf Jung [Sat, 12 Sep 2020 14:01:33 +0000 (16:01 +0200)]
test-cargo-miri: normalize slashes before comparing paths

3 years agomake sure tests pass even with RUST_TEST_NOCAPTURE set
Ralf Jung [Sat, 12 Sep 2020 12:24:56 +0000 (14:24 +0200)]
make sure tests pass even with RUST_TEST_NOCAPTURE set

3 years agomake (not yet actually used) doctest actually use the crate, and fix a comment
Ralf Jung [Sat, 12 Sep 2020 12:09:43 +0000 (14:09 +0200)]
make (not yet actually used) doctest actually use the crate, and fix a comment

3 years agomore consistent error capitalization
Ralf Jung [Sat, 12 Sep 2020 12:02:08 +0000 (14:02 +0200)]
more consistent error capitalization

3 years agocleaner output for cargo-miri-test harness
Ralf Jung [Sat, 12 Sep 2020 11:57:49 +0000 (13:57 +0200)]
cleaner output for cargo-miri-test harness

3 years agomake sure subcrate tests have the right cwd
Ralf Jung [Sat, 12 Sep 2020 11:52:05 +0000 (13:52 +0200)]
make sure subcrate tests have the right cwd

3 years agotest 'cargo miri run' CWD, also for subcrate in a workspace
Ralf Jung [Sat, 12 Sep 2020 11:33:30 +0000 (13:33 +0200)]
test 'cargo miri run' CWD, also for subcrate in a workspace

3 years agotest propagating env vars from build.rs to binary
Ralf Jung [Sat, 12 Sep 2020 11:10:23 +0000 (13:10 +0200)]
test propagating env vars from build.rs to binary