Skip to content

Rollup of 9 pull requests #90952

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 38 commits into from

Conversation

matthiaskrgr
Copy link
Member

Successful merges:

Failed merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

ChrisDenton and others added 30 commits October 30, 2021 12:03

Verified

This commit was signed with the committer’s verified signature.
ChrisDenton Chris Denton
"echo" is not an application on Windows so `Command` tests could fail even if that's not what's being tested for.

Verified

This commit was signed with the committer’s verified signature.
ChrisDenton Chris Denton
This commit goes through and updates various `#[cfg]` as appropriate to
get the wasm64-unknown-unknown target behaving similarly to the
wasm32-unknown-unknown target. Most of this is just updating various
conditions for `target_arch = "wasm32"` to also account for `target_arch
= "wasm64"` where appropriate. This commit also lists `wasm64` as an
allow-listed architecture to not have the `restricted_std` feature
enabled, enabling experimentation with `-Z build-std` externally.

The main goal of this commit is to enable playing around with
`wasm64-unknown-unknown` externally via `-Z build-std` in a way that's
similar to the `wasm32-unknown-unknown` target. These targets are
effectively the same and only differ in their pointer size, but wasm64
is much newer and has much less ecosystem/library support so it'll still
take time to get wasm64 fully-fledged.
These are all stable as-of-now in the WebAssembly specification so any
engine which implements wasm64 will surely implement these features as
well.
This commit works around a crash in LLVM when the
`-generate-arange-section` argument is passed to LLVM. An LLVM bug is
opened for this and the code in question is also set to continue passing
this flag with LLVM 14, assuming that this is fixed by the time LLVM 14
comes out. Otherwise this should work around debuginfo crashes on LLVM
13.
* Add wasm64 variants for inline assembly along the same lines as wasm32
* Update a few directives in libtest to check for `target_family`
  instead of `target_arch`
* Update some rustc codegen and typechecks specialized for wasm32 to
  also work for wasm64.
Brings in some fixes and better support for the wasm64 target.
This pulls in a fix for wasm64 to work correctly with this dlmalloc
Ensure that they compile with the now-a-feature-is-required logic.
Co-authored-by: Josh Triplett <josh@joshtriplett.org>
This follows from discussion on
https://bugs.llvm.org/show_bug.cgi?id=52442 where it looks like this
section doesn't make sense for wasm targets.

Unverified

The committer email address is not verified.
The spans for "trait bound not satisfied" errors in trivial trait bounds referenced the entire item (fn, impl, struct) before.
Now they only reference the obligation itself (`String: Copy`)

Address rust-lang#90869

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jhpratt Jacob Pratt
This should significantly reduce the frequency of merge conflicts.

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jhpratt Jacob Pratt

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Windows: Resolve `process::Command` program without using the current directory

Currently `std::process::Command` searches many directories for the executable to run, including the current directory. This has lead to a [CVE for `ripgrep`](https://cve.circl.lu/cve/CVE-2021-3013) but presumably other command line utilities could be similarly vulnerable if they run commands. This was [discussed on the internals forum](https://internals.rust-lang.org/t/std-command-resolve-to-avoid-security-issues-on-windows/14800). Also discussed was [which directories should be searched](https://internals.rust-lang.org/t/windows-where-should-command-new-look-for-executables/15015).

EDIT: This PR originally removed all implicit paths. They've now been added back as laid out in the rest of this comment.

## Old Search Strategy

The old search strategy is [documented here][1]. Additionally Rust adds searching the child's paths (see also rust-lang#37519). So the full list of paths that were searched was:

1. The directories that are listed in the child's `PATH` environment variable.
2. The directory from which the application loaded.
3. The current directory for the parent process.
4. The 32-bit Windows system directory.
5. The 16-bit Windows system directory.
6. The Windows directory.
7. The directories that are listed in the PATH environment variable.

## New Search Strategy

The new strategy removes the current directory from the searched paths.

1. The directories that are listed in the child's PATH environment variable.
2. The directory from which the application loaded.
3. The 32-bit Windows system directory.
4. The Windows directory.
5. The directories that are listed in the parent's PATH environment variable.

Note that it also removes the 16-bit system directory, mostly because there isn't a function to get it. I do not anticipate this being an issue in modern Windows.

## Impact

Removing the current directory should fix CVE's like the one linked above. However, it's possible some Windows users of affected Rust CLI applications have come to expect the old behaviour.

This change could also affect small Windows-only script-like programs that assumed the current directory would be used. The user would need to use `.\file.exe` instead of the bare application name.

This PR could break tests, especially those that test the exact output of error messages (e.g. Cargo) as this does change the error messages is some cases.

[1]: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa#parameters

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
…riplett

std: Get the standard library compiling for wasm64

This commit goes through and updates various `#[cfg]` as appropriate to
get the wasm64-unknown-unknown target behaving similarly to the
wasm32-unknown-unknown target. Most of this is just updating various
conditions for `target_arch = "wasm32"` to also account for `target_arch
= "wasm64"` where appropriate. This commit also lists `wasm64` as an
allow-listed architecture to not have the `restricted_std` feature
enabled, enabling experimentation with `-Z build-std` externally.

The main goal of this commit is to enable playing around with
`wasm64-unknown-unknown` externally via `-Z build-std` in a way that's
similar to the `wasm32-unknown-unknown` target. These targets are
effectively the same and only differ in their pointer size, but wasm64
is much newer and has much less ecosystem/library support so it'll still
take time to get wasm64 fully-fledged.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
…shtriplett

Add Vec::retain_mut

This is to continue the discussion started in rust-lang#83218.

Original comment was:

> Take 2 of rust-lang#34265, since I needed this today.

The reason I think why we should add `retain_mut` is for coherency and for discoverability. For example we have `chunks` and `chunks_mut` or `get` and `get_mut` or `iter` and `iter_mut`, etc. When looking for mutable `retain`, I would expect `retain_mut` to exist. It took me a while to find out about `drain_filter`. So even if it provides an API close to `drain_filter`, just for the discoverability, I think it's worth it.

cc `@m-ou-se` `@jonas-schievink` `@Mark-Simulacrum`

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
…r=oli-obk

Add `#[inline]`s to `SortedIndexMultiMap`

They're small enough and good candidates to add `#[inline]` generally.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Print escaped string if char literal has multiple characters, but only one printable character

Fixes rust-lang#90857

I'm not sure about the error message here, it could get rather long and *maybe* using the names of characters would be better? That wouldn't help the length any, though.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
…und, r=estebank

Fix span for non-satisfied trivial trait bounds

The spans for "trait bound not satisfied" errors in trivial trait bounds referenced the entire item (fn, impl, struct) before.
Now they only reference the obligation itself (`String: Copy`)

Address rust-lang#90869

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Remove workaround for the forward progress handling in LLVM

this workaround was only needed for LLVM < 12 and the minimum LLVM version was updated to 12 in rust-lang#90175

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
…htriplett

Alphabetize language features

This should significantly reduce the frequency of merge conflicts.

r? `@joshtriplett`

`@rustbot` label: +A-contributor-roadblock +S-waiting-on-review

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
update miri

This is needed to fix https://github.com/rust-lang/miri-test-libstd
r? `@ghost`
@rustbot rustbot added the rollup A PR which is a rollup label Nov 16, 2021
@matthiaskrgr
Copy link
Member Author

@bors r+ rollup=never p=9

@bors
Copy link
Collaborator

bors commented Nov 16, 2021

📌 Commit e878e6d has been approved by matthiaskrgr

@bors bors added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Nov 16, 2021
@bors
Copy link
Collaborator

bors commented Nov 16, 2021

⌛ Testing commit e878e6d with merge 7031ebe23ce4a773f793ba0d79792c36e88b0d45...

@rust-log-analyzer
Copy link
Collaborator

The job wasm32 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
[RUSTC-TIMING] build_script_build test:false 0.518
error[E0432]: unresolved import `crate::core_arch::wasm32`
   --> library/core/src/../../stdarch/crates/core_arch/src/mod.rs:162:35
    |
162 |         pub use crate::core_arch::wasm32::*;
    |                                   ^^^^^^ could not find `wasm32` in `core_arch`

error[E0432]: unresolved import `core::arch::wasm32::v128`
 --> library/core/src/../../portable-simd/crates/core_simd/src/vendor/wasm32.rs:2:5
  |
2 | use core::arch::wasm32::v128;
  |     ^^^^^^^^^^^^^^^^^^^^^^^^ no `v128` in `core_arch::arch::wasm32`
For more information about this error, try `rustc --explain E0432`.
[RUSTC-TIMING] core test:false 13.236
error: could not compile `core` due to 2 previous errors
Build completed unsuccessfully in 0:15:34

@bors
Copy link
Collaborator

bors commented Nov 16, 2021

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Nov 16, 2021
@matthiaskrgr matthiaskrgr deleted the rollup-erypfty branch November 20, 2021 15:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
rollup A PR which is a rollup S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet