Commit graph

208652 commits

Author SHA1 Message Date
DrMeepster
fa1b720cfc refactor into private functions 2022-11-03 18:13:53 -07:00
DrMeepster
224dff4e15 add acquire when init once is already complete 2022-10-30 23:06:21 -07:00
bors
c162fd36d2 Auto merge of #2636 - RalfJung:scalar-field-retag, r=oli-obk
Stacked Borrows: make scalar field retagging the default

I think it is time to finally close this soundness gap. Any objections? :)

Unfortunately the latest released versions of hashbrown and scopeguard can fail under full field retagging. The fixes have landed in the git repos but have not been released yet. I don't know if scalar field retagging as enabled by this PR is sufficient to cause problems with these crates, but it seems likely that this would be the case -- e.g. if both `value` and `dropfn` are scalars, the entire scopeguard struct will be a `ScalarPair` and thus get field retagging.

However, given that we actually generate LLVM `noalias` for these cases, it seems prudent to inform users of this risk. They can easily set `-Zmiri-field-retag=none` to opt-out of this change.

Cc https://github.com/rust-lang/miri/issues/2528
2022-10-29 16:12:23 +00:00
Ralf Jung
1470e99244 Stacked Borrows: make scalar field retagging the default 2022-10-29 17:17:23 +02:00
bors
79a48ce716 Auto merge of #2634 - RalfJung:miri-script, r=oli-obk
./miri updates: toolchain, rustc-push, rustc-pull

This merges the `./rustup-toolchain` script into `./miri` as `./miri toolchain`, and adds two new commands for josh-based syncing.

r? `@rust-lang/miri`
2022-10-29 11:09:45 +00:00
bors
18a23a5d03 Auto merge of #2635 - RalfJung:rustup-managed-miri, r=RalfJung
explain how to go back to rustup-managed Miri

Fixes https://github.com/rust-lang/miri/issues/2633
2022-10-29 10:37:13 +00:00
Ralf Jung
2a3a53b151 explain how to go back to rustup-managed Miri 2022-10-29 12:36:31 +02:00
Ralf Jung
39598e46f6 merge rustup-toolchain into ./miri 2022-10-29 12:21:14 +02:00
Ralf Jung
4f3a9881da teach ./miri how to do Josh syncs 2022-10-29 12:04:38 +02:00
bors
e729db172a Auto merge of #2631 - RalfJung:futex-wait-no-isolate, r=RalfJung
Support timeouts with monotonic clocks even when isolation is enabled

With the deterministic monotonic clock support we now have, we can allow some synchronization primitives with timeouts even under isolation:
- Linux futex waiting (when set to the monotonic clock)
- pthread_cond_timedwait (when set to the monotonic clock)
- Windows WaitOnAddress

Unfortunately none of these exist on macOS -- the standard library always uses the system clock for timeouts on macOS, so that will still require `-Zmiri-disable-isolation`.
2022-10-29 09:00:14 +00:00
Ralf Jung
c8a5d4b600 relative futex and condvar timeouts can work with isolation 2022-10-28 22:54:50 +02:00
bors
a0fbf0d077 Auto merge of #2630 - RalfJung:windows-parking, r=RalfJung
Implement thread parking for Windows

Cc https://github.com/rust-lang/miri/issues/2628

Based on code by `@DrMeepster.` However I adjusted `WakeByAddressSingle`: I don't think the futex value is compared *again* after the thread is woken up. I see nothing in the Windows docs indicating such a comparison, and the Linux futex does not behave like that either. So we only check the value before sleeping, same as on Linux.
2022-10-28 20:19:28 +00:00
Ralf Jung
9b0cdf9a6e cleanup some test cfg 2022-10-28 16:24:56 +02:00
Ralf Jung
40e340e9fb test most sync primitives on Windows 2022-10-28 16:24:56 +02:00
Ralf Jung
8f99d011f2 simplify Linux futex impl a bit 2022-10-28 15:57:28 +02:00
Ralf Jung
3f6fc1fb5a threadleak_ignored should now pass with preemption (the issue has been fixed a while ago) 2022-10-28 15:48:58 +02:00
Ralf Jung
a23d1fb1ac implement thread parking on Windows 2022-10-28 15:48:18 +02:00
bors
4827d41466 Auto merge of #2627 - RalfJung:ignore-windows, r=RalfJung
update ignore-windows comments

Turns out 2 of these tests can actually be enabled. :)
2022-10-28 11:50:15 +00:00
Ralf Jung
676e53f5b1 update ignore-windows comments 2022-10-28 11:42:42 +02:00
bors
3321c2d3e7 Auto merge of #2626 - RalfJung:pthread_setname_np, r=RalfJung
pthread_setname_np returns an int on macOS

Fixes https://github.com/rust-lang/miri/issues/2625
2022-10-28 08:32:23 +00:00
Ralf Jung
6e3b0df8b8 pthread_setname_np returns an int on macOS 2022-10-28 10:31:43 +02:00
bors
bd4a56bce8 Auto merge of #2624 - WaffleLapkin:iforgor💀, r=RalfJung
Implement `ptr_mask` intrinsic

I promised I'll implement it, but then forgot 😅
2022-10-27 22:48:45 +00:00
Maybe Waffle
7663305dff Implement ptr_mask intrinsic 2022-10-27 23:47:50 +04:00
bors
d795f7e479 Auto merge of #2623 - RalfJung:cron, r=RalfJung
change cronjob time

This way it is again in my morning.
2022-10-27 07:38:19 +00:00
Ralf Jung
50af895ef7 change cronjob time 2022-10-27 09:36:40 +02:00
bors
859da657d9 Auto merge of #2622 - RalfJung:ci, r=RalfJung
simplify GHA

I think we can just list the cases with `include:` and don't also need this `build` array.
2022-10-26 12:26:43 +00:00
Ralf Jung
27e5cc8898 simplify GHA 2022-10-26 14:05:52 +02:00
bors
2b160e8aa2 Auto merge of #2621 - RalfJung:windows-gnu, r=RalfJung
test on windows-gnu target

The windows-gnu target for an open-source windows toolchain is slightly different in some low-level aspects of the standard library, such as TLS handling. So let's separately ensure that this works. (Also tests a 64bit windows target on a windows host, which we didn't have so far.)
2022-10-26 12:02:55 +00:00
Ralf Jung
3986d06542 test on windows-gnu target 2022-10-26 14:01:11 +02:00
bors
6ce5226b4b Auto merge of #2620 - RalfJung:getname, r=RalfJung
add pthread_getname_np

A new libstd test needs this, and there doesn't seem to be a good reason not to have this.
2022-10-26 08:58:53 +00:00
Ralf Jung
dac2412890 account for different max thread name lengths on different platforms 2022-10-26 10:50:11 +02:00
Ralf Jung
70087eaa35 add pthread_getname_np 2022-10-26 10:44:07 +02:00
bors
136a1db50d Auto merge of #2614 - saethlin:stack-inspection-tools, r=RalfJung
Improve miri_print_borrow_stacks

Per post-merge review on https://github.com/rust-lang/miri/pull/2322

* `miri_print_stacks` renamed to `miri_print_borrow_stacks`
* A bit more details in docs, clarified how unstable these functions are meant to be
* Print an `unknown_bottom` if one exists

Open question: Currently `miri_get_alloc_id` gets the expected `AllocId` for `Wildcard` pointers, but for pointers with no provenance, the function reports UB and halts the interpreter. That's definitely wrong. But what _should_ we do? Is it reasonable to check if the pointer has `None` provenance and try to get an `AllocId` for its address? That still leaves us with a failure path, which in this case might be best-handled as an ICE? I'm just not sure that changing the return type of `miri_get_alloc_id` to `Option` is a win because it complicates all normal uses of this.
2022-10-26 07:58:36 +00:00
Ralf Jung
71e6815885
tweak docs 2022-10-26 09:58:21 +02:00
Ben Kimock
d86bbd5094 Rename, improve docs, fail better 2022-10-25 17:51:49 -04:00
bors
a46ccba167 Auto merge of #2618 - RalfJung:rustup, r=RalfJung
Rustup
2022-10-25 18:02:23 +00:00
Ralf Jung
5a5a3e4ef4 bless clippy 2022-10-25 20:00:11 +02:00
Ralf Jung
543afa8896 rustup 2022-10-25 19:49:12 +02:00
Ralf Jung
705390c126 Merge branch 'master' of http://localhost:8000/rust-lang/rust.git:at_commit=75dd959a3a40eb5b4574f8d2e23aa6efbeb33573[:prefix=src/tools/miri]:/src/tools/miri 2022-10-25 19:48:23 +02:00
bors
85d089b41e Auto merge of #103392 - RalfJung:miri, r=oli-obk
update Miri

I had to use a hacked version of josh to create this, so let's be careful with merging this and maybe wait a bit to see if the josh issue becomes more clear. But the history looks good to me, we are not adding duplicates of rustc commits that were previously mirrored to Miri.

Also I want to add some cross-testing of Miri in x.py.
2022-10-25 12:33:39 +00:00
Ralf Jung
a157e0e88f Miri: disable macOS testing for now 2022-10-25 13:40:38 +02:00
bors
c6bd7e21c6 Auto merge of #103513 - Dylan-DPC:rollup-nn3ite2, r=Dylan-DPC
Rollup of 6 pull requests

Successful merges:

 - #98204 (Stabilize `Option::unzip()`)
 - #102587 (rustc: Use `unix_sigpipe` instead of `rustc_driver::set_sigpipe_handler`)
 - #103122 (Remove misc_cast and validate types when casting)
 - #103379 (Truncate thread names on Linux and Apple targets)
 - #103482 (Clairify Vec::capacity docs)
 - #103511 (Codegen tweaks)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2022-10-25 09:37:06 +00:00
Dylan DPC
6aea54c082
Rollup merge of #103511 - nnethercote:bb-tweaks, r=bjorn3
Codegen tweaks

Best reviewed one commit at a time.

r? `@bjorn3`
2022-10-25 14:43:16 +05:30
Dylan DPC
35b46de61b
Rollup merge of #103482 - aDotInTheVoid:vec-cap-docs, r=thomcc
Clairify Vec::capacity docs

Update both the text and example to be clear that the method gives *total*, (not *spare*) capacity

Fixes #103326
2022-10-25 14:43:15 +05:30
Dylan DPC
75023d61a1
Rollup merge of #103379 - cuviper:truncate-thread-name, r=thomcc
Truncate thread names on Linux and Apple targets

These targets have system limits on the thread names, 16 and 64 bytes
respectively, and `pthread_setname_np` returns an error if the name is
longer. However, we're not in a context that can propagate errors when
we call this, and we used to implicitly truncate on Linux with `prctl`,
so now we manually truncate these names ahead of time.

r? ``````@thomcc``````
2022-10-25 14:43:15 +05:30
Dylan DPC
8ba2a651fb
Rollup merge of #103122 - ouz-a:mir-technical-debt, r=oli-obk
Remove misc_cast and validate types when casting

Continuing our work in #102675

r? ````@oli-obk````
2022-10-25 14:43:14 +05:30
Dylan DPC
8a5ce1d615
Rollup merge of #102587 - Enselic:rustc-unix_sigpipe, r=jackh726
rustc: Use `unix_sigpipe` instead of `rustc_driver::set_sigpipe_handler`

This is the first (known) step towards starting to use `unix_sigpipe` in the wild. Eventually, `rustc_driver::set_sigpipe_handler` can be removed and all clients can use `unix_sigpipe` instead.

For now we just start using `unix_sigpipe` in one place: `rustc` itself.

It is easy to manually verify this change. If you remove `#[unix_sigpipe = "sig_dfl"]` and run `./x.py build` you will get an ICE when you do `./build/x86_64-unknown-linux-gnu/stage1/bin/rustc --help | false`. Add back `#[unix_sigpipe = "sig_dfl"]` and the ICE disappears again.

PR that added `set_sigpipe_handler`: https://github.com/rust-lang/rust/pull/49606

Tracking issue for `unix_sigpipe`: #97889

Not sure exactly how to label this PR. Going with T-libs for now since this is a T-libs feature.

````@rustdoc```` labels +T-libs
2022-10-25 14:43:14 +05:30
Dylan DPC
d2d44f619f
Rollup merge of #98204 - Kixiron:stable-unzip, r=thomcc
Stabilize `Option::unzip()`

Stabilizes `Option::unzip()`, closes #87800

```@rustbot``` modify labels: +T-libs-api
2022-10-25 14:43:13 +05:30
bors
31d754a1df Auto merge of #102988 - dpaoliello:inlinerawdylib, r=dpaoliello
Support raw-dylib functions being used inside inlined functions

Fixes #102714

Issue Details:
When generating the import library for `raw-dylib` symbols, we currently only use the functions and variables declared within the current crate. This works fine if all crates are static libraries or `rlib`s as the generated import library will be contained in the static library or `rlib` itself, but if a dependency is a dynamic library AND the use of a `raw-dylib` function or variable is inlined or part of a generic instantiation then the current crate won't see its dependency's import library and so linking will fail.

Fix Details:
Instead, when we generate the import library for a `dylib` or `bin` crate, we will now generate it for the symbols both for the current crate and all upstream crates. We do this in two steps so that the import library for the current crate is passed into the linker first, thus it is preferred if there are any ambiguous symbols.
2022-10-25 04:57:51 +00:00
Nicholas Nethercote
6cd35ac203 Simplify cast_shift_expr_rhs.
It's only ever used with shift operators.
2022-10-25 14:39:20 +11:00