Commit graph

301699 commits

Author SHA1 Message Date
Jakub Beránek
32f4876bf1
Create a typed wrapper for codegen backends
To avoid representing them just with strings.
2025-07-31 19:40:11 +02:00
bors
32e7a4b92b Auto merge of #144405 - lcnr:hir-typeck-uniquify, r=BoxyUwU
uniquify root goals during HIR typeck

We need to rely on region identity to deal with hangs such as https://github.com/rust-lang/trait-system-refactor-initiative/issues/210 and to keep the current behavior of `fn try_merge_responses`.

This is a problem as borrowck starts by replacing each *occurrence* of a region with a unique inference variable. This frequently splits a single region during HIR typeck into multiple distinct regions. As we assume goals to always succeed during borrowck, relying on two occurances of a region being identical during HIR typeck causes ICE. See the now fixed examples in https://github.com/rust-lang/trait-system-refactor-initiative/issues/27 and rust-lang/rust#139409.

We've previously tried to avoid this issue by always *uniquifying* regions when canonicalizing goals. This prevents caching subtrees during canonicalization which resulted in hangs for very large types. People rely on such types in practice, which caused us to revert our attempt to reinstate `#[type_length_limit]` in https://github.com/rust-lang/rust/pull/127670. The complete list of changes here:
- rust-lang/rust#107981
- rust-lang/rust#110180
- rust-lang/rust#114117
- rust-lang/rust#130821

After more consideration, all occurrences of such large types need to happen outside of typeck/borrowck. We know this as we already walk over all types in the MIR body when replacing their regions with nll vars.

This PR therefore enables us to rely on region identity inside of the trait solver by exclusively **uniquifying root goals during HIR typeck**. These are the only goals we assume to hold during borrowck. This is insufficient as type inference variables may "hide" regions we later uniquify. Because of this, we now stash proven goals which depend on inference variables in HIR typeck and reprove them after writeback. This closes https://github.com/rust-lang/trait-system-refactor-initiative/issues/127.

This was originally part of rust-lang/rust#144258 but I've moved it into a separate PR. While I believe we need to rely on region identity to fix the performance issues in some way, I don't know whether rust-lang/rust#144258 is the best approach to actually do so. Regardless of how we deal with the hangs however, this change is necessary and desirable regardless.

r? `@compiler-errors` or `@BoxyUwU`
2025-07-31 00:32:55 +00:00
bors
606dcc0d2e Auto merge of #116316 - cjgillot:incr-privacy, r=petrochenkov
Remove eval_always from check_private_in_public.

This PR attempts to avoid re-computing `check_private_in_public` query. First by marking the query as non-`eval_always`, and by reducing the amount of accesses to HIR as much as possible.

Latest perf https://github.com/rust-lang/rust/pull/116316#issuecomment-3094672105 shows that we manage it. The cost is extra dep-graph bookkeeping.
2025-07-30 21:29:47 +00:00
bors
3048886e59 Auto merge of #144692 - samueltardieu:rollup-0j1y08x, r=samueltardieu
Rollup of 4 pull requests

Successful merges:

 - rust-lang/rust#143465 (Support multiple crate versions in --extern-html-root-url)
 - rust-lang/rust#144308 ([rustdoc] Display total time and compilation time of merged doctests)
 - rust-lang/rust#144655 (clean up codegen fn attrs)
 - rust-lang/rust#144675 (Reject running `compiletest` self-tests against stage 0 rustc unless explicitly allowed)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-07-30 18:16:17 +00:00
Samuel Tardieu
202d1f5bf4
Rollup merge of #144675 - jieyouxu:compiletest-staging, r=Kobzol
Reject running `compiletest` self-tests against stage 0 rustc unless explicitly allowed

Currently, in `pr-check-1`, we run `python3 ../x.py test --stage 0 src/tools/compiletest`, which is `compiletest` self-tests against stage 0 rustc. This makes it very annoying for PRs wanting to change target spec JSON format, which `compiletest` depends on for target information, as otherwise `compiletest` would have to know how to handle 2 different target spec JSON formats and know when to pick which.

Instead of doing that, we change `compiletest` self-tests to reject running against stage 0 `rustc` *unless* explicitly allowed with `build.compiletest-allow-stage0=true`. `build.compiletest-allow-stage0` is a proper bootstrap config option in favor of the ad-hoc `COMPILETEST_FORCE_STAGE0` env var. This means that:

- `./x test src/tools/compiletest --stage=0` is not allowed, unless `build.compiletest-allow-stage0=true` is set. In this scenario, `compiletest` self-tests should be expected to fail unless the stage 0 `rustc` as provided is like codegen_cranelift where it's *actually* built from in-tree `rustc` sources.
- In CI, we change `./x test src/tools/compiletest --stage=0` to `./x test src/tools/compiletest --stage=1`, and move it to `pr-check-2`. Yes, this involves building the stage 1 compiler, but `pr-check-2` already has to build stage 1 compiler to test stage 1 library crates.
- Crucially, this means that **`compiletest` is only intended to support one target spec JSON format**, namely the one corresponding to the in-tree `rustc`.
- This should preserve the `compiletest-use-stage0-libtest` UX optimization where changing `compiler/` tree should still not require rebuilding `compiletest` as long as `build.compiletest-use-stage0-libtest=true`, as that should remain orthogonal. This is completely unlike my previous attempt at https://github.com/rust-lang/rust/pull/144563 that tries to do a way more invasive change which would cause the rebuild problem.

Best reviewed commit-by-commit.

---

r? `@Kobzol`
2025-07-30 19:49:03 +02:00
Samuel Tardieu
175121903a
Rollup merge of #144655 - jdonszelmann:cleanup-codegen-fn-attrs, r=WaffleLapkin
clean up codegen fn attrs

This honestly had become a mess over time and needed some love. No behavior should've changed, and I effectively just moved code around. Though, I can't promise there weren't any bugs in the original code with how randomly it was organised.....

r? `@WaffleLapkin`
2025-07-30 19:49:02 +02:00
Samuel Tardieu
61760fbda4
Rollup merge of #144308 - GuillaumeGomez:merged-doctest-times, r=lolbinarycat
[rustdoc] Display total time and compilation time of merged doctests

Fixes rust-lang/rust#144270.

Does it look good to you `@kpreid?`

<img width="908" height="263" alt="image" src="https://github.com/user-attachments/assets/cd5d082d-c4e0-42ed-91dd-bd263b413dcd" />
2025-07-30 19:49:02 +02:00
Samuel Tardieu
b38ece9021
Rollup merge of #143465 - kornelski:extern-name, r=petrochenkov
Support multiple crate versions in --extern-html-root-url

Rustdoc's `--extern-html-root-url` used to use `tcx.crate_name()` to identify crates, but that used crates' internal names from their metadata, instead of names given to them in `--extern`. That was confusing, because both `--extern…` arguments seem related and use similar syntax. Crucially, this didn't work correctly with Cargo's package aliases or multiple versions of crates.

`sess.opts.externs` lacks `CrateNum`, and `Resolver.extern_prelude` gets destroyed before `rustdoc` has a chance to see it, so I've had to save this mapping in `CStore`.

Just in case, I've kept the previous mapping by crate name as a fallback for crates that weren't matched by their extern name.

Fixes rust-lang/rust#76296
2025-07-30 19:49:01 +02:00
Jana Dönszelmann
1d589c87be
clean up codegen fn attrs 2025-07-30 16:39:16 +02:00
lcnr
2b065e7c0b extend comment 2025-07-30 14:30:57 +02:00
lcnr
df2e54376c add comment and opaque type fixme 2025-07-30 14:01:37 +02:00
lcnr
b6cbe33aeb handle region dependent goals due to infer vars 2025-07-30 14:01:37 +02:00
Jieyou Xu
e954253d43
Add change tracker entry 2025-07-30 19:55:17 +08:00
Jieyou Xu
2cdd19384f
Run compiletest self-tests against stage 1 rustc
And move `./x test compiletest --stage=1` to `pr-check-2`, where testing
library artifacts already requires building the stage 1 compiler.
2025-07-30 19:55:17 +08:00
Jieyou Xu
2033a06d7f
Deny compiletest self-tests being run against stage 0 rustc unless explicitly allowed
Otherwise, `compiletest` would have to know e.g. how to parse two
different target spec, if target spec format was changed between beta
`rustc` and in-tree `rustc`.
2025-07-30 19:55:08 +08:00
Jieyou Xu
a7fcc738c9
Update codegen_{cranelift,gcc} and opt-dist to use build.compiletest-allow-stage0 2025-07-30 19:55:07 +08:00
Jieyou Xu
0cf6eb5f75
Introduce proper build.compiletest-allow-stage0 config option
In favor of the adhoc `COMPILETEST_FORCE_STAGE0` env var.
2025-07-30 19:54:16 +08:00
bors
e5e79f8bd4 Auto merge of #144673 - Zalathar:rollup-0kpeq3n, r=Zalathar
Rollup of 6 pull requests

Successful merges:

 - rust-lang/rust#144042 (Verify llvm-needs-components are not empty and match the --target value)
 - rust-lang/rust#144268 (Add method `find_ancestor_not_from_macro` and `find_ancestor_not_from_extern_macro` to supersede `find_oldest_ancestor_in_same_ctxt`)
 - rust-lang/rust#144411 (Remove `hello_world` directory)
 - rust-lang/rust#144662 (compiletest: Move directive names back into a separate file)
 - rust-lang/rust#144666 (Make sure to account for the right item universal regions in borrowck)
 - rust-lang/rust#144668 ([test][run-make] add needs-llvm-components)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-07-30 09:02:21 +00:00
Stuart Cook
3682d8c1ce
Rollup merge of #144668 - daltenty:daltenty/runmake-llvm-components, r=jieyouxu
[test][run-make] add needs-llvm-components

Add some constraints to run-make tests that require specific target support and will fail without them.
2025-07-30 17:59:40 +10:00
Stuart Cook
08e26fc678
Rollup merge of #144666 - compiler-errors:correct-late, r=lqd
Make sure to account for the right item universal regions in borrowck

Fixes https://github.com/rust-lang/rust/issues/144608.

The ICE comes from a mismatch between the liberated late bound regions (i.e. "`ReLateParam`"s) that come from promoting closure outlives, and the regions we have in our region vid mapping from `UniversalRegions`.

When building `UniversalRegions`, we end up using the liberated regions from the binder of the closure's signature:

c8bb4e8a12/compiler/rustc_borrowck/src/universal_regions.rs (L521)

Notably, this signature may be anonymized if the closure signature being deduced comes from an external constraints:

c8bb4e8a12/compiler/rustc_hir_typeck/src/closure.rs (L759-L762)

This is true in the test file I committed, where the signature is influenced by the `impl FnMut(&mut ())` RPIT.

However, when promoting a type outlives constraint we end up creating a late bound lifetime mapping that disagrees with those liberated late bound regions we constructed in `UniversalRegions`:

c8bb4e8a12/compiler/rustc_borrowck/src/universal_regions.rs (L299)

Specifically, in `for_each_late_bound_region_in_item` (which is called by `for_each_late_bound_region_in_recursive_scope`), we were using `tcx.late_bound_vars` which uses the late bound regions *from the HIR*. This query both undercounts the late bound regions (e.g. those that end up being deduced from bounds), and also doesn't account for the fact that we anonymize them in the signature as mentioned above.

c8bb4e8a12/compiler/rustc_borrowck/src/universal_regions.rs (L977)

This PR fixes that function to use the *correct signature*, which properly considers the bound vars that come from deducing the signature of the closure, and which comes from the closure's args from the `type_of` query.
2025-07-30 17:59:40 +10:00
Stuart Cook
ba8295019e
Rollup merge of #144662 - Zalathar:directive-names, r=fmease
compiletest: Move directive names back into a separate file

This list no longer needs to be included in multiple crates, but having the list in its own file makes it easier to find and update when necessary.

As discussed at https://github.com/rust-lang/rust/pull/143850#issuecomment-3130307023.
2025-07-30 17:59:39 +10:00
Stuart Cook
38e7615e78
Rollup merge of #144411 - Kivooeo:remove-world, r=jieyouxu
Remove `hello_world` directory

Move `tests/ui/hello_world/main.rs` and retire the single-file `tests/ui/hello_world/` directory.

Part of https://github.com/rust-lang/rust/issues/133895.

r? `@jieyouxu`
2025-07-30 17:59:39 +10:00
Stuart Cook
02a68e42fd
Rollup merge of #144268 - xizheyin:find-oldest-ancestor, r=jieyouxu
Add method `find_ancestor_not_from_macro` and `find_ancestor_not_from_extern_macro` to supersede `find_oldest_ancestor_in_same_ctxt`

As I was using it, I realized that the function is supposed to walk up to expand the chain? This seems to be the opposite of what I understood.

r? `@jieyouxu`
2025-07-30 17:59:38 +10:00
Stuart Cook
b6ac83d372
Rollup merge of #144042 - dpaoliello:verifyllvmcomp, r=jieyouxu
Verify llvm-needs-components are not empty and match the --target value

I recently discovered a test with an empty `llvm-needs-components` entry (fixed in rust-lang/rust#143979) which meant that it didn't work correctly when building Rust with a limited set of LLVM targets.

This change makes a pair of improvements to prevent this issue from creeping in again:
* When parsing directives with values, `compiletest` will now raise an error if there is an empty value.
* Improved the `target_specific_tests` tidy checker to map targets to LLVM components, to verify that any existing `llvm-needs-components` contains the target being used.

I also fixed all the issues flagged by the improved tidy checker.
2025-07-30 17:59:37 +10:00
bors
72716b134a Auto merge of #144305 - ChrisDenton:win-free-disk-space, r=marcoieni
Free disk space on Windows 2025 runners

I've managed to reduce the time deletion takes by:

 - Using powershell, which is generally faster for filesystem operations than msys2
 - Performing deletions concurrently then waiting for them all to complete

It still takes 2-10 mins but that's not too bad.
2025-07-30 06:00:09 +00:00
David Tenty
21af154998 [test][run-make] add needs-llvm-components
Add some constraints to run-make tests that require specific target support and will fail without them.
2025-07-30 00:39:43 -04:00
Chris Denton
43018d3722
Free disk space on Windows 2025 runners 2025-07-30 04:10:28 +00:00
Michael Goulet
98d08ff014 Make sure to account for the right item universal regions in borrowck 2025-07-30 04:07:19 +00:00
bors
919c409243 Auto merge of #144577 - oli-obk:wrapping-niche, r=scottmcm
Pick the largest niche even if the largest niche is wrapped around

fixes rust-lang/rust#144388

r? `@scottmcm`
2025-07-30 02:57:04 +00:00
Zalathar
dee2013641 compiletest: Move directive names back into a separate file
This list no longer needs to be included in multiple crates, but having it in
its own file makes it easier to find and update when necessary.
2025-07-30 12:45:25 +10:00
bors
c8bb4e8a12 Auto merge of #144658 - jhpratt:rollup-jdzhz27, r=jhpratt
Rollup of 8 pull requests

Successful merges:

 - rust-lang/rust#144034 (tests: Test line number in debuginfo for diverging function calls)
 - rust-lang/rust#144510 (Fix Ord, Eq and Hash implementation of panic::Location)
 - rust-lang/rust#144583 (Enable T-compiler backport nomination)
 - rust-lang/rust#144586 (Update wasi-sdk to 27.0 in CI)
 - rust-lang/rust#144605 (Resolve: cachify `ExternPreludeEntry.binding` through a `Cell`)
 - rust-lang/rust#144632 (Update some tests for LLVM 21)
 - rust-lang/rust#144639 (Update rustc-perf submodule)
 - rust-lang/rust#144640 (Add support for the m68k architecture in 'object_architecture')

r? `@ghost`
`@rustbot` modify labels: rollup
2025-07-29 23:53:04 +00:00
Jacob Pratt
72f4ff2c45
Rollup merge of #144640 - FractalFir:m68k_arch, r=Urgau
Add support for the m68k architecture in 'object_architecture'

This is a tiny PR that adds the m68k architecture to `object_architecture`. This allows us to build rmeta files for that ISA(we use the object crate to pack metadata into object files).
2025-07-29 18:55:22 -04:00
Jacob Pratt
322686de5d
Rollup merge of #144639 - Kobzol:x-perf-tui, r=lqd
Update rustc-perf submodule

Mostly to include https://github.com/rust-lang/rustc-perf/pull/2204.
2025-07-29 18:55:21 -04:00
Jacob Pratt
bd40dd6c61
Rollup merge of #144632 - nikic:llvm-21-tests, r=durin42
Update some tests for LLVM 21

Fixes https://github.com/rust-lang/rust/issues/144604.
Fixes https://github.com/rust-lang/rust/issues/144606.

r? `@durin42`
2025-07-29 18:55:21 -04:00
Jacob Pratt
0912d66c7f
Rollup merge of #144605 - LorrensP-2158466:cache-extern-prelude, r=petrochenkov
Resolve: cachify `ExternPreludeEntry.binding` through a `Cell`

Provides interior mutability to the `binding` field of `ExternPreludeEntry` as this field behaves like a cache. Per [zulip thread](https://rust-lang.zulipchat.com/#narrow/channel/421156-gsoc/topic/Project.3A.20Parallel.20Macro.20Expansion/near/531390914).

A little preparatory work for batched import resolution, which is part of [#gsoc > Project: Parallel Macro Expansion](https://rust-lang.zulipchat.com/#narrow/channel/421156-gsoc/topic/Project.3A.20Parallel.20Macro.20Expansion).

r? `@petrochenkov`
2025-07-29 18:55:20 -04:00
Jacob Pratt
79ad87e7ee
Rollup merge of #144586 - alexcrichton:update-weasi-sdk, r=Mark-Simulacrum
Update wasi-sdk to 27.0 in CI

This updates the wasi-sdk used in CI to build release binaries and run CI with. No major motivation beyond keeping things up-to-date and following the development of wasi-sdk.
2025-07-29 18:55:19 -04:00
Jacob Pratt
53347802d2
Rollup merge of #144583 - apiraino:enable-t-compiler-backport-nomination, r=jieyouxu,Urgau
Enable T-compiler backport nomination

This patches the triagebot.toml so that it will trigger a backport label on pull requests fixing regressions. Applying a backport label will trigger creating a Zulip thread. For now the configuration only for `T-compiler` labeled regressions.

Comments in the code explain how it works. Documentation [on the forge](https://forge.rust-lang.org/triagebot/backport.html).

```
[backport.foo]

# The pull request MUST have one of these labels
required_pr_labels = ["T-compiler"]

# The regression MUST have this label
required_issue_label = "regression-from-stable-to-beta"

# if the above conditions matches, the PR will receive these labels
add_labels = ["beta-nominated"]
```

Anything to think about before merging this?

thanks for a review
2025-07-29 18:55:19 -04:00
Jacob Pratt
48dfddd39e
Rollup merge of #144510 - orlp:fix-location-ord, r=ibraheemdev
Fix Ord, Eq and Hash implementation of panic::Location

Fixes https://github.com/rust-lang/rust/issues/144486.

Now properly compares/hashes the filename rather than the pointer to the string.
2025-07-29 18:55:18 -04:00
Jacob Pratt
56bf50df12
Rollup merge of #144034 - Enselic:diverging-function-call-debuginfo, r=wesleywiser
tests: Test line number in debuginfo for diverging function calls

Closes rust-lang/rust#59558 which just [E-needs-test](https://github.com/rust-lang/rust/issues/59558#issuecomment-1322236891).

The bug seems to have been fixed in **nightly-2021-05-10**:

```sh
for toolchain in nightly-2021-05-09 \
                 nightly-2021-05-10 \
                 1.88; do
    echo -e "\nWith $toolchain:"
    rustc +$toolchain tests/codegen/diverging-function-call-debuginfo.rs --emit llvm-ir -o /tmp/out.ll -g -Clto -Copt-level=0
    build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck --input-file /tmp/out.ll tests/codegen/diverging-function-call-debuginfo.rs --check-prefix=CHECK --dump-input-context 10 2>/dev/null && echo OK || echo FAIL
done
```

```
With nightly-2021-05-09:
FAIL

With nightly-2021-05-10:
OK

With 1.88:
OK
```

which gives the following list of candidate commits. Not clear which one it is exactly but it doesn't matter much since we can confirm that the test works. I have confirmed locally that with **nightly-2021-05-09** we get `line: 0` for the last call.

<details>
<summary>click to expand</summary>

```
$ git log ^881c1ac408 ca82264ec7 --no-merges --oneline
```
f25aa5767f Remove unused `opt_span_warn` function
ebbc949575 Note why `Handler::fatal` is different from `Sesssion::fatal`
96509b4835 Make `Diagnostic::span_fatal` unconditionally raise an error
e49f4471aa Remove some unnecessary uses of `struct_span_fatal`
955fdaea4a Rename `Parser::span_fatal_err` -> `Parser::span_err`
4b7c8b0b53 Add `#[track_caller]` to `FakeDefId::expect_real()`
ba13225ba1 Remove `FakeDefId::expect_local()`
020d83d9f5 Enable `-W semicolon_in_expressions_from_macros` in bootstrap
1b928ff8f8 Update LLVM submodule
c2b15a6b64 Support -C passes in NewPM
5519cbfe33 Don't force -O1 with ThinLTO
7c4989ab70 Drop -opt-bisect-limit=0 flag from test
db140de8f2 Explicitly register GCOV profiling pass as well
5ecbe7fcf8 Explicitly register instrprof pass
0318883cd6 Make -Z new-llvm-pass-manager an Option<bool>
0367e24f94 Avoid predecessors having Drop impls

</details>
2025-07-29 18:55:18 -04:00
bors
ba7e63b638 Auto merge of #144393 - heiher:str-contains-lsx, r=tgross35
LoongArch64 LSX fast-path for `str.contains(&str)`

Benchmark results with LLVM 21 on LA664:

```
OLD:
test bench_is_contained_in ... bench:          43.63 ns/iter (+/- 0.04)

NEW:
test bench_is_contained_in ... bench:          12.81 ns/iter (+/- 0.01)
```
2025-07-29 20:44:32 +00:00
Orson Peters
05da623016 Fix Ord, Eq and Hash implementation of panic::Location
Faster equality compare

Add tests

Add missing files for tests
2025-07-29 22:15:44 +02:00
Kivooeo
01891d5544 remove hello world directory 2025-07-30 00:13:40 +05:00
Daniel Paoliello
cffde732ce Verify llvm-needs-components are not empty and match the --target value 2025-07-29 11:20:23 -07:00
bors
686bc1c5f9 Auto merge of #144557 - cjgillot:lower-more-span, r=compiler-errors
Complete span AST lowering.

r? `@ghost`
2025-07-29 17:39:48 +00:00
Martin Nordholts
307fd41123 tests: Test line number in debuginfo for diverging function calls 2025-07-29 18:59:09 +02:00
Alex Crichton
77fc593a6a Update wasi-sdk to 27.0 in CI
This updates the wasi-sdk used in CI to build release binaries and run
CI with. No major motivation beyond keeping things up-to-date and
following the development of wasi-sdk.
2025-07-29 08:23:22 -07:00
Jakub Beránek
b60026ab42
Remove no longer needed handling of nonstandard licenses 2025-07-29 16:41:44 +02:00
Jakub Beránek
ab4024eb31
Update license exceptions for rustc-perf 2025-07-29 16:41:10 +02:00
Jakub Beránek
d1a877aac2
Improve tidy error on dependency license exceptions 2025-07-29 16:40:41 +02:00
Jakub Beránek
0b807fc1af
Update rustc-perf submodule 2025-07-29 16:18:52 +02:00