Skip to content

Rollup of 15 pull requests #129809

New issue

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

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

Already on GitHub? # to your account

Merged
merged 34 commits into from
Aug 31, 2024
Merged

Rollup of 15 pull requests #129809

merged 34 commits into from
Aug 31, 2024

Conversation

matthiaskrgr
Copy link
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

aDotInTheVoid and others added 30 commits August 15, 2024 13:07
This shouldn't affect projects indirectly depending on wasm-bindgen
because cargo passes `--cap-lints=allow` when building dependencies.
It should be 0.3.74~ish.

This should help with backtraces on Android, QNX NTO 7.0, and Windows.
Previously `libname.a` naming was supported as a fallback when producing rlibs, but not when producing executables or dynamic libraries
This commit fixes an assert in the WASI-specific implementation of
thread sleep to ensure that sleeping for a very large period of time
blocks instead of panicking. This can come up when testing programs that
sleep "forever", for example.
Several compiler functions have `Option<!>` for their return type.
That's odd. The only valid return value is `None`, so why is this type
used?

Because it lets you write certain patterns slightly more concisely. E.g.
if you have these common patterns:
```
    let Some(a) = f() else { return };
    let Ok(b) = g() else { return };
```
you can shorten them to these:
```
    let a = f()?;
    let b = g().ok()?;
```
Huh.

An `Option` return type typically designates success/failure. How should
I interpret the type signature of a function that always returns (i.e.
doesn't panic), does useful work (modifying `&mut` arguments), and yet
only ever fails? This idiom subverts the type system for a cute
syntactic trick.

Furthermore, returning `Option<!>` from a function F makes things
syntactically more convenient within F, but makes things worse at F's
callsites. The callsites can themselves use `?` with F but should not,
because they will get an unconditional early return, which is almost
certainly not desirable. Instead the return value should be ignored.
(Note that some of callsites of `process_operand`, `process_immedate`,
`process_assign` actually do use `?`, though the early return doesn't
matter in these cases because nothing of significance comes after those
calls. Ugh.)

When I first saw this pattern I had no idea how to interpret it, and it
took me several minutes of close reading to understand everything I've
written above. I even started a Zulip thread about it to make sure I
understood it properly. "Save a few characters by introducing types so
weird that compiler devs have to discuss it on Zulip" feels like a bad
trade-off to me. This commit replaces all the `Option<!>` return values
and uses `else`/`return` (or something similar) to replace the relevant
`?` uses. The result is slightly more verbose but much easier to
understand.
…-patterns, r=nnethercote

Don't make statement nonterminals match pattern nonterminals

Right now, the heuristic we use to check if a token may begin a pattern nonterminal falls back to `may_be_ident`:
https://github.com/rust-lang/rust/blob/ef71f1047e04438181d7cb925a833e2ada6ab390/compiler/rustc_parse/src/parser/nonterminal.rs#L21-L37

This has the unfortunate side effect that a `stmt` nonterminal eagerly matches against a `pat` nonterminal, leading to a parse error:
```rust
macro_rules! m {
    ($pat:pat) => {};
    ($stmt:stmt) => {};
}

macro_rules! m2 {
    ($stmt:stmt) => {
        m! { $stmt }
    };
}

m2! { let x = 1 }
```

This PR fixes it by more accurately reflecting the set of nonterminals that may begin a pattern nonterminal.

As a side-effect, I modified `Token::can_begin_pattern` to work correctly and used that in `Parser::nonterminal_may_begin_with`.
…z,notriddle

Separate core search logic with search ui

Currenty, the `search.js` mixed with UI/DOM manipulation codes and search logic codes, I propose to extract the search logic to a class for following benefits:

- Clean code. Separation of DOM manipulation and search logic can lead better code maintainability and easy code testings.
- Easy share the search logic for third party to utilize the search function, such as [Rust Search Extension](https://rust.extension.sh), https://query.rs.

This PR added a new class called `DocSearch`, which mainly expose following methods:

```js
class DocSearch {
	// Dependency inject searchIndex, rootPath and searchState
	constructor(rawSearchIndex, rootPath, searchState) {
		// build search index...
	}

	static parseQuery(userQuery) {
	}

	async execQuery(parsedQuery, filterCrates, currentCrate) {
	}
}
```
…=fmease

rustdoc-json: Add test for `Self` type

Inspired by rust-lang#128471, the rustdoc-json suite had no tests in place for the `Self` type. This PR adds one.

I've also manually checked locally that this test passes on 29e9248, confirming that adding `clean::Type::SelfTy` didn't change the JSON output. (potentially adding a self type to json (insead of (ab)using generic) is tracked in rust-lang#128522)

Updates rust-lang#81359

r? ````````@fmease````````
linker: Synchronize native library search in rustc and linker

Also search for static libraries with alternative naming (`libname.a`) on MSVC when producing executables or dynamic libraries, and not just rlibs.

This unblocks rust-lang#123436.

try-job: x86_64-msvc
Don't use `TyKind` in a lint

Allows us to remove an inherent method from `TyKind` from the type ir crate.
…fcw-to-deny, r=daxpedda,alexcrichton

Deny `wasm_c_abi` lint to nudge the last 25%

This shouldn't affect projects indirectly depending on wasm-bindgen because cargo passes `--cap-lints=allow` when building dependencies.

The motivation is that the ecosystem has mostly taken up the versions of wasm-bindgen that are compatible in general, but ~25% or so of recent downloads remain on lower versions. However, this change might still be unnecessarily disruptive. I mostly propose it as a discussion point.
…, r=tgross35

Re-enable android tests/benches in alloc/core

This is basically a revert of rust-lang#73729. These tests better work on android now; it's been 4 years and we don't use dlmalloc on that target anymore.

And I've validated that they should pass now with a try-build :)
…b22, r=workingjubilee

Bump backtrace to 0.3.74~ish

Commit: rust-lang/backtrace-rs@230570f

This should help with backtraces on Android, QNX NTO 7.0, and Windows.
It addresses a case of backtrace incurring undefined behavior on Android.
…d, r=workingjubilee

allow BufReader::peek to be called on unsized types

rust-lang#128405
…r=lcnr

Simplify some extern providers

Simplifies some extern crate providers:
1. Generalize the `ProcessQueryValue` identity impl to work on non-`Option` types.
2. Allow `ProcessQueryValue` to wrap its output in an `EarlyBinder`, to simplify `explicit_item_bounds`/`explicit_item_super_predicates`.
3. Use `{ table }` and friends more when possible.
…-dead

Remove `Option<!>` return types.

Several compiler functions have `Option<!>` for their return type. That's odd. The only valid return value is `None`, so why is this type used?

Because it lets you write certain patterns slightly more concisely. E.g. if you have these common patterns:
```
    let Some(a) = f() else { return };
    let Ok(b) = g() else { return };
```
you can shorten them to these:
```
    let a = f()?;
    let b = g().ok()?;
```
Huh.

An `Option` return type typically designates success/failure. How should I interpret the type signature of a function that always returns (i.e. doesn't panic), does useful work (modifying `&mut` arguments), and yet only ever fails? This idiom subverts the type system for a cute syntactic trick.

Furthermore, returning `Option<!>` from a function F makes things syntactically more convenient within F, but makes things worse at F's callsites. The callsites can themselves use `?` with F but should not, because they will get an unconditional early return, which is almost certainly not desirable. Instead the return value should be ignored. (Note that some of callsites of `process_operand`, `process_immedate`, `process_assign` actually do use `?`, though the early return doesn't matter in these cases because nothing of significance comes after those calls. Ugh.)

When I first saw this pattern I had no idea how to interpret it, and it took me several minutes of close reading to understand everything I've written above. I even started a Zulip thread about it to make sure I understood it properly. "Save a few characters by introducing types so weird that compiler devs have to discuss it on Zulip" feels like a bad trade-off to me. This commit replaces all the `Option<!>` return values and uses `else`/`return` (or something similar) to replace the relevant `?` uses. The result is slightly more verbose but much easier to understand.

r? ``````@cjgillot``````
@rustbot rustbot added T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Aug 31, 2024
@matthiaskrgr
Copy link
Member Author

@bors r+ rollup=never p=15

@bors
Copy link
Collaborator

bors commented Aug 31, 2024

📌 Commit 25e3b66 has been approved by matthiaskrgr

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 31, 2024
@bors
Copy link
Collaborator

bors commented Aug 31, 2024

⌛ Testing commit 25e3b66 with merge 9649706...

@matthiaskrgr
Copy link
Member Author

there we go

@bors
Copy link
Collaborator

bors commented Aug 31, 2024

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing 9649706 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Aug 31, 2024
@bors bors merged commit 9649706 into rust-lang:master Aug 31, 2024
7 checks passed
@rustbot rustbot added this to the 1.82.0 milestone Aug 31, 2024
@rust-timer
Copy link
Collaborator

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#120221 Don't make statement nonterminals match pattern nonterminals c8a538a7032ba3d35c90642bc6c47d985282af8d (link)
#126183 Separate core search logic with search ui c5f6a66bd472f75e77a7d9ed1ee83454b63d5057 (link)
#129123 rustdoc-json: Add test for Self type 52b51b8a3e8716b491fdf82c075c303f79cce65e (link)
#129366 linker: Synchronize native library search in rustc and link… 970b7b00bc353065c23d1e2d8e22c0a2b8260da7 (link)
#129527 Don't use TyKind in a lint 32892549aa22df7399226f3281b94b32cd2ec7c3 (link)
#129534 Deny wasm_c_abi lint to nudge the last 25% 8c930915fe4ca02780c9ff2fec9612723ca9c203 (link)
#129640 Re-enable android tests/benches in alloc/core 16f4069d874ebc66e07259afddae546ccb536ca1 (link)
#129642 Bump backtrace to 0.3.74~ish cb6799285d407dab26843816f9b98d515eecadc9 (link)
#129675 allow BufReader::peek to be called on unsized types fc177c6c435e97b84e3d7ec9ed19870c4dfbfd3b (link)
#129723 Simplify some extern providers d7b7d7deaeb75804926dc0d2529f064a1ef0d1fb (link)
#129724 Remove Option<!> return types. d101b3fa61198f4a193e77477e77d95dd9889fec (link)
#129725 Stop using ty::GenericPredicates for non-predicates_of qu… 1b1ad99aff96a560ae4405daf63996c023f43801 (link)
#129731 Allow running ./x.py test compiler 702679cd9f0236ce8997c93aa01ee8c57d7a30e6 (link)
#129751 interpret/visitor: make memory order iteration slightly mor… 2ab629b2fff152427b0f45f5ade6c44cefe50d50 (link)
#129754 wasi: Fix sleeping for Duration::MAX 196534199a7aba5e0b5195084a5bf1ca72cca969 (link)

previous master: fa72f0763d

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (9649706): comparison URL.

Overall result: ❌✅ regressions and improvements - ACTION NEEDED

Next Steps: If you can justify the regressions found in this perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please open an issue or create a new PR that fixes the regressions, add a comment linking to the newly created issue or PR, and then add the perf-regression-triaged label to this PR.

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.3% [0.3%, 0.3%] 1
Regressions ❌
(secondary)
0.9% [0.4%, 1.7%] 3
Improvements ✅
(primary)
-0.5% [-2.6%, -0.2%] 25
Improvements ✅
(secondary)
-0.7% [-5.9%, -0.2%] 24
All ❌✅ (primary) -0.5% [-2.6%, 0.3%] 26

Max RSS (memory usage)

Results (primary 0.1%, secondary -0.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.8% [0.4%, 3.2%] 36
Regressions ❌
(secondary)
0.8% [0.5%, 2.6%] 34
Improvements ✅
(primary)
-0.9% [-3.2%, -0.4%] 30
Improvements ✅
(secondary)
-0.9% [-3.8%, -0.4%] 42
All ❌✅ (primary) 0.1% [-3.2%, 3.2%] 66

Cycles

Results (primary -0.4%, secondary -0.2%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.7% [0.4%, 2.0%] 13
Regressions ❌
(secondary)
1.0% [0.4%, 3.3%] 50
Improvements ✅
(primary)
-0.8% [-4.9%, -0.4%] 31
Improvements ✅
(secondary)
-1.1% [-4.2%, -0.4%] 66
All ❌✅ (primary) -0.4% [-4.9%, 2.0%] 44

Binary size

Results (primary 0.3%, secondary 0.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.3% [0.0%, 0.8%] 51
Regressions ❌
(secondary)
0.0% [0.0%, 0.0%] 5
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.3% [0.0%, 0.8%] 51

Bootstrap: 789.792s -> 788.814s (-0.12%)
Artifact size: 338.69 MiB -> 338.74 MiB (0.01%)

@rustbot rustbot added the perf-regression Performance regression. label Aug 31, 2024
@matthiaskrgr matthiaskrgr deleted the rollup-cyygnxh branch September 1, 2024 17:35
@Kobzol
Copy link
Contributor

Kobzol commented Sep 3, 2024

The coercions improvement is noise, but the rest seems legit. More improvements than regressions, marking as triaged.

@rustbot label: +perf-regression-triaged

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label Sep 3, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-run-make Area: port run-make Makefiles to rmake.rs A-rustdoc-json Area: Rustdoc JSON backend merged-by-bors This PR was explicitly merged by bors. O-wasi Operating system: Wasi, Webassembly System Interface perf-regression Performance regression. perf-regression-triaged The performance regression has been triaged. rollup A PR which is a rollup S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.