Add a jobserver proxy to ensure at least one token is always held
This adds a jobserver proxy to ensure at least one token is always held by `rustc`. Currently with `-Z threads` `rustc` can temporarily give up all its tokens, causing `cargo` to spawn additional `rustc` instances beyond the job limit.
The current behavior causes an issue with `cargo fix` which has a global lock preventing concurrent `rustc` instances, but it also holds a jobserver token, causing a deadlock when `rustc` gives up its token. That is fixed by this PR.
Fixes https://github.com/rust-lang/rust/issues/67385.
Fixes https://github.com/rust-lang/rust/issues/133873.
Fixes https://github.com/rust-lang/rust/issues/140093.
Drop AST on a separate thread and prefetch `hir_crate`
This drop AST on a separate thread and prefetches `hir_crate`.
A `spawn` function is added to the `parallel` module which spawn some work on the Rayon thread pool.
Rollup of 10 pull requests
Successful merges:
- #140385 (Subtree update of `rust-analyzer`)
- #140458 (Fix for async drop ice with partly dropped tuple)
- #140465 (chore: edit and move tests)
- #140467 (Don't FCW assoc consts in patterns)
- #140468 (Minor tweaks to make some normalization (adjacent) code less confusing)
- #140470 (CI: rfl: move job forward to Linux v6.15-rc4)
- #140476 (chore: delete unused ui/auxiliary crates)
- #140481 (Require sanitizers be enabled for asan_odr_windows.rs)
- #140486 (rustfmt: Also allow bool literals as first item of let chain)
- #140494 (Parser: Document restrictions)
r? `@ghost`
`@rustbot` modify labels: rollup
rustfmt: Also allow bool literals as first item of let chain
This is a functional cherry-pick of https://github.com/rust-lang/rustfmt/pull/6492
I'm bringing this change over directly as the subtree sync is taking more effort than anticipated (some unrelated r-l/rustfmt changes need to be reverted before we perform the full sync) and we need to ensure that rustfmt behavior accounts with the final style guide rules as part of let chain stabilization.
r? ````@ghost````
Require sanitizers be enabled for asan_odr_windows.rs
Issue Details:
The `asan_odr_windows.rs` test is failing on AArch64 Windows, as sanitizers aren't supported on that platform.
Fix Details:
Apply the correct "need sanitizer" requirements to the test.
chore: delete unused ui/auxiliary crates
It appears that all the tests that used it have been moved to tests/ui/editions/ (or elsewhere) already.
r? `````@jieyouxu`````
CI: rfl: move job forward to Linux v6.15-rc4
A hopefully routine upgrade to Linux v6.15-rc4!
r? `````@lqd````` `````@Kobzol`````
try-job: x86_64-rust-for-linux
`````@rustbot````` label A-rust-for-linux
`````@bors````` try
Don't FCW assoc consts in patterns
Fixes#140447
See comment in added test. We could also check that the anon const is a const arg by looking at the HIR. I'm not sure that's necessary though 🤔 The only consts that are evaluated "for the type system" are const args (which *should* get FCWs) and const patterns (which cant be anon consts afaik).
chore: edit and move tests
I deleted `ui/non-copyable-void.rs`: added in ab4105d9e8 to test that "nonconstructable" enums are "noncopyable", but these properties are not correlated anymore.
Second commit is kinda messy because I moved/edited/renamed some files at the same time, but I deleted nothing there.
Rollup of 9 pull requests
Successful merges:
- #134232 (Share the naked asm impl between cg_ssa and cg_clif)
- #139624 (Don't allow flattened format_args in const.)
- #140090 (Check bare function idents for non snake-case name)
- #140203 (Issue an error when using `no_mangle` on language items)
- #140450 (ast: Remove token visiting from AST visitor)
- #140498 (Misc tweaks to HIR typeck (mostly w.r.t. checking calls))
- #140504 (transmutability: ensure_sufficient_stack when answering query)
- #140506 (unstable-book: fix capitalization)
- #140516 (Replace use of rustc_type_ir by rustc_middle)
Failed merges:
- #140374 (Resolve instance for SymFn in global/naked asm)
r? `@ghost`
`@rustbot` modify labels: rollup
Replace use of rustc_type_ir by rustc_middle
cc #138449
I want to help on this issue. I have replaced all the rustc_type_ir uses by the equivalent type in rustc_middle.
DelayedSet is also re-exposed by rustc_middle.
transmutability: ensure_sufficient_stack when answering query
Based on #140380.
Fixes#118860. The compile time was addressed earlier, this merely addresses stack overflow part of the issue.
r? `@jswrenn` `@joshlf`
Issue an error when using `no_mangle` on language items
This pull requests adds the code to issue an error or a warning when using `no_mangle` on language items. This should detail why the `undefined symbol` error is issued for the code described in #139923.
The pull request adds two ui tests, one testing the error and the other one the warning.
I would love some feedback here, as I am not sure that the error and warning are issues using the right API.
Check bare function idents for non snake-case name
This PR adds the check required to lint on bare function idents for non snake-case name.
Reported at #140089.
cc `@theemathas`
Don't allow flattened format_args in const.
Fixes https://github.com/rust-lang/rust/issues/139136
Fixes https://github.com/rust-lang/rust/issues/139621
We allow `format_args!("a")` in const, but don't allow any format_args with arguments in const, such as `format_args!("{}", arg)`.
However, we accidentally allow `format_args!("hello {}", "world")` in const, as it gets flattened to `format_args!("hello world")`.
This also applies to panic in const.
This wasn't supposed to happen. I added protection against this in the format args flattening code, ~~but I accidentally marked a function as const that shouldn't have been const~~ but this was removed in https://github.com/rust-lang/rust/pull/135139.
This is a breaking change. The crater found no breakage, however.
This breaks things like:
```rust
const _: () = if false { panic!("a {}", "a") };
```
and
```rust
const F: std::fmt::Arguments<'static> = format_args!("a {}", "a");
```