Commit Graph

265119 Commits

Author SHA1 Message Date
Matthias Krüger
5f10a99c7a
Rollup merge of #129725 - compiler-errors:predicates-of, r=fmease
Stop using `ty::GenericPredicates` for non-predicates_of queries

`GenericPredicates` is a struct of several parts: A list of of an item's own predicates, and a parent def id (and some effects related stuff, but ignore that since it's kinda irrelevant). When instantiating these generic predicates, it calls `predicates_of` on the parent and instantiates its predicates, and appends the item's own instantiated predicates too:

acb4e8b625/compiler/rustc_middle/src/ty/generics.rs (L407-L413)

Notice how this should result in a recursive set of calls to `predicates_of`... However, `GenericPredicates` is *also* misused by a bunch of *other* queries as a convenient way of passing around a list of predicates. For these queries, we don't ever set the parent def id of the `GenericPredicates`, but if we did, then this would be very easy to mistakenly call `predicates_of` instead of some other intended parent query.

Given that footgun, and the fact that we don't ever even *use* the parent def id in the `GenericPredicates` returned from queries like `explicit_super_predicates_of`, It really has no benefit over just returning `&'tcx [(Clause<'tcx>, Span)]`.

This PR additionally opts to wrap the results of `EarlyBinder`, as we've tended to use that in the return type of these kinds of queries to properly convey that the user has params to deal with, and it also gives a convenient way of iterating over a slice of things after instantiating.
2024-08-31 10:08:57 +02:00
Matthias Krüger
44185520cf
Rollup merge of #129724 - nnethercote:rm-Option-bang, r=fee1-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``````
2024-08-31 10:08:56 +02:00
Matthias Krüger
9510beba4d
Rollup merge of #129723 - compiler-errors:extern-providers, 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.
2024-08-31 10:08:56 +02:00
Matthias Krüger
10fb626958
Rollup merge of #129675 - lolbinarycat:bufreader_peek_unsized, r=workingjubilee
allow BufReader::peek to be called on unsized types

#128405
2024-08-31 10:08:55 +02:00
Matthias Krüger
fbf74dfb00
Rollup merge of #129642 - workingjubilee:bump-backtrace-fc37b22, r=workingjubilee
Bump backtrace to 0.3.74~ish

Commit: https://github.com/rust-lang/backtrace-rs/commit/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.
2024-08-31 10:08:55 +02:00
Matthias Krüger
385ffaedbf
Rollup merge of #129640 - saethlin:unignore-android-in-alloc, r=tgross35
Re-enable android tests/benches in alloc/core

This is basically a revert of https://github.com/rust-lang/rust/pull/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 :)
2024-08-31 10:08:54 +02:00
Matthias Krüger
8f35a4fb8c
Rollup merge of #129534 - workingjubilee:ratchet-wasm-c-abi-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.
2024-08-31 10:08:54 +02:00
Matthias Krüger
2a321e14a5
Rollup merge of #129527 - compiler-errors:lint-nit, r=Nadrieril
Don't use `TyKind` in a lint

Allows us to remove an inherent method from `TyKind` from the type ir crate.
2024-08-31 10:08:53 +02:00
Matthias Krüger
9f3ce40718
Rollup merge of #129366 - petrochenkov:libsearch, r=jieyouxu
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 https://github.com/rust-lang/rust/pull/123436.

try-job: x86_64-msvc
2024-08-31 10:08:53 +02:00
Matthias Krüger
defc245d06
Rollup merge of #129123 - aDotInTheVoid:rustdoc-json-self, r=fmease
rustdoc-json: Add test for `Self` type

Inspired by #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 29e924841f, 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 #128522)

Updates #81359

r? ````````@fmease````````
2024-08-31 10:08:52 +02:00
Matthias Krüger
1f0292bb8f
Rollup merge of #126183 - Folyd:search-core, r=GuillaumeGomez,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) {
	}
}
```
2024-08-31 10:08:52 +02:00
Matthias Krüger
1fd0c71818
Rollup merge of #120221 - compiler-errors:statements-are-not-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`:
ef71f1047e/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`.
2024-08-31 10:08:51 +02:00
ranger-ross
cbf92fcf39
Fixed more typos in library/core 2024-08-31 14:57:38 +09:00
ranger-ross
92f45900bb
Fixed typos in btree map docs 2024-08-31 14:50:37 +09:00
ranger-ross
24ad26db3b
Fixed some typos in the standard library documentation/comments 2024-08-31 14:41:01 +09:00
bors
fa72f0763d Auto merge of #129797 - workingjubilee:cleanup-apple-ci, r=workingjubilee
Try to reduce space usage in dist CI

We have had recurrent CI problems as a result of GitHub adding a new version of Xcode to its runners[^0], which has consumed ~40GB of space which served as padding. Try to reduce the number of Xcodes on our systems, because we only use Xcode 14 in actual practice. Also, try to move files instead of pointlessly copy them when we're at the end of the job.

I could not resist addressing a few shellcheck lints while I was at it.

[^0]: https://github.com/actions/runner-images/issues/10511
2024-08-31 03:54:22 +00:00
Jubilee Young
8da1c0049a ci: Take tail instead of head to avoid broken pipes 2024-08-30 20:51:52 -07:00
Jubilee Young
6cb4768ddd ci: Avoid legacy backticks in upload-artifacts.sh 2024-08-30 20:51:52 -07:00
Jubilee Young
fe7c97c2e7 ci: Use mv instead of cp in upload step 2024-08-30 20:51:52 -07:00
Jubilee Young
06f49f6d53 ci: Try to remove unused Xcode dirs 2024-08-30 20:51:52 -07:00
Weihang Lo
6c393b1e15
Update cargo 2024-08-31 09:30:22 +08:00
Josh Stone
99e14e3c80 Remove the relnote for rustdoc's *unstable* --remap-path-prefix 2024-08-30 17:56:17 -07:00
Josh Stone
27873f8052 Mention sort perf, and add its panics in compat notes 2024-08-30 17:54:36 -07:00
Josh Stone
dd9fcffb20 Drop the edition relnote about ! fallback 2024-08-30 17:18:54 -07:00
Josh Stone
8c19c14c3f Add release notes for 1.81.0 2024-08-30 17:18:54 -07:00
joboet
f51289214c
mark joboet as on vacation 2024-08-30 21:28:42 +02:00
Boxy
4d272b18b9 Bump to 1.83 2024-08-30 19:58:04 +01:00
Adrian Taylor
8e20b66524 Some code review suggestions. 2024-08-30 17:48:15 +00:00
Strophox
7fde02ea53 enable Miri to pass const pointers through FFI
Co-authored-by: Ralf Jung <post@ralfj.de>
2024-08-30 16:05:53 +02:00
cyrgani
fff063ee77 add crashtests for several old unfixed ICEs 2024-08-30 12:50:07 +02:00
Matthias Krüger
355d7c9ecd couple more crash tests 2024-08-30 12:38:22 +02:00
Ralf Jung
f6b7727605 enumerate the two parts of the NaN rules 2024-08-30 11:31:36 +02:00
Nicholas Nethercote
c5e4ff17a6 Remove #[macro_use] extern crate tracing from rustc_hir_typeck. 2024-08-30 17:14:59 +10:00
Nicholas Nethercote
4b3fa8e9f0 Remove #[macro_use] extern crate tracing from rustc_trait_selection. 2024-08-30 17:14:59 +10:00
Nicholas Nethercote
cc16c902f1 Remove #[macro_use] extern crate tracing from rustc_hir_analysis. 2024-08-30 17:14:59 +10:00
Nicholas Nethercote
67556eca99 Remove #[macro_use] extern crate tracing from rustc_borrowck. 2024-08-30 17:14:53 +10:00
Rémy Rakic
dff3d3588d add borrows to NLL MIR dumps
explicitly disable `-Zmir-include-spans` in mir-opt tests

This will override the NLL default of true, and keep the blessed dumps
easier to work with.
2024-08-30 07:14:31 +00:00
Rémy Rakic
f3f5b4dcf2 refactor NLL MIR dump entry point 2024-08-30 07:14:31 +00:00
Rémy Rakic
92e1046502 enable extra comments in NLL MIR dumps 2024-08-30 07:14:31 +00:00
Rémy Rakic
e0bb1c7291 make -Z mir-include-spans a dedicated enum
We want to allow setting this on the CLI, override it only in MIR
passes, and disable it altogether in mir-opt tests.

The default value is "only for NLL MIR dumps", which is considered off
for all intents and purposes, except for `rustc_borrowck` when an NLL
MIR dump is requested.
2024-08-30 07:14:19 +00:00
Rémy Rakic
c646b46b52 introduce PrettyPrintMirOptions for cosmetic MIR dump options
initially starting with `-Z mir-include-spans` because we want them in
the NLL mir dump pass
2024-08-30 07:07:28 +00:00
Ralf Jung
08fadfd8d8 add hyphen in floating-point 2024-08-30 08:23:12 +02:00
Zalathar
21edc73517 bootstrap: Try to track down why initial_libdir sometimes fails
Determining this path occasionally fails locally for unknown reasons, resulting
in the build failing with an unhelpful `StripPrefixError(())` panic message.

In order to track down why that's happening, include some relevant information
in the panic message when that failure occurs.
2024-08-30 15:45:09 +10:00
Yuri Astrakhan
f41e0bb41d Squashed aarch64_unknown_nto_qnx700 support 2024-08-30 01:19:55 -04:00
bors
f03c7b2170 Auto merge of #3853 - rust-lang:rustup-2024-08-30, r=saethlin
Automatic Rustup
2024-08-30 05:13:13 +00:00
The Miri Cronjob Bot
23f4eae905 Merge from rustc 2024-08-30 05:09:57 +00:00
The Miri Cronjob Bot
0453d9bee8 Preparing for merge from rustc 2024-08-30 05:02:07 +00:00
Nicholas Nethercote
ac7a293336 Avoid repeated interning in SelfArgVisitor. 2024-08-30 13:35:41 +10:00
Nicholas Nethercote
ee5ec5a196 Remove #[macro_use] extern crate tracing from rustfmt. 2024-08-30 13:35:05 +10:00
Nicholas Nethercote
de02c4af61 Remove #[macro_use] extern crate tracing from rustfmt helpers. 2024-08-30 13:31:05 +10:00