Commit graph

298901 commits

Author SHA1 Message Date
Urgau
663939dfb0
Rollup merge of #142674 - hkBst:remove-duplicate-crashtest, r=bjorn3
remove duplicate crash test

I noticed near duplication between "library/alloctests/tests/testing/crash_test.rs" and "library/alloctests/testing/crash_test.rs" and wanted to try and remove that. The only difference is the path used to import `Debug`, but it seems not to matter. Perhaps my change is still wrong?

r? ```@bjorn3```
2025-06-18 19:40:33 +02:00
Urgau
bf38e5dee3
Rollup merge of #142377 - Urgau:unremap-rustc-dev, r=jieyouxu
Try unremapping compiler sources

See [#t-compiler/help > Span pointing to wrong file location (`rustc-dev` component)](https://rust-lang.zulipchat.com/#narrow/channel/182449-t-compiler.2Fhelp/topic/Span.20pointing.20to.20wrong.20file.20location.20.28.60rustc-dev.60.20component.29/with/521087083).

This PR is a follow-up to rust-lang/rust#141751 regarding the compiler side.

Specifically we now take into account the `CFG_VIRTUAL_RUSTC_DEV_SOURCE_BASE_DIR` env from rust-lang/rust#141751 when trying to unremap sources from `$sysroot/lib/rustlib/rustc-src/rust` (the `rustc-dev` component install directory).

Best reviewed commit by commit.

cc ``@samueltardieu``
r? ``@jieyouxu``
2025-06-18 19:40:32 +02:00
Urgau
2011ab5152
Rollup merge of #142123 - Kobzol:timings, r=nnethercote
Implement initial support for timing sections (`--json=timings`)

This PR implements initial support for emitting high-level compilation section timings. The idea is to provide a very lightweight way of emitting durations of various compilation sections (frontend, backend, linker, or on a more granular level macro expansion, typeck, borrowck, etc.). The ultimate goal is to stabilize this output (in some form), make Cargo pass `--json=timings` and then display this information in the HTML output of `cargo build --timings`, to make it easier to quickly profile "what takes so long" during the compilation of a Cargo project. I would personally also like if Cargo printed some of this information in the interactive `cargo build` output, but the `build --timings` use-case is the main one.

Now, this information is already available with several other sources, but I don't think that we can just use them as they are, which is why I proposed a new way of outputting this data (`--json=timings`):
- This data is available under `-Zself-profile`, but that is very expensive and forever unstable. It's just a too big of a hammer to tell us the duration it took to run the linker.
- It could also be extracted with `-Ztime-passes`. That is pretty much "for free" in terms of performance, and it can be emitted in a structured form to JSON via `-Ztime-passes-format=json`. I guess that one alternative might be to stabilize this flag in some form, but that form might just be `--json=timings`? I guess what we could do in theory is take the already emitted time passes and reuse them for `--json=timings`. Happy to hear suggestions!

I'm sending this PR mostly for a vibeck, to see if the way I implemented it is passable. There are some things to figure out:
- How do we represent the sections? Originally I wanted to output `{ section, duration }`, but then I realized that it might be more useful to actually emit `start` and `end` events. Both because it enables to see the output incrementally (in case compilation takes a long time and you read the outputs directly, or Cargo decides to show this data in `cargo build` some day in the future), and because it makes it simpler to represent hierarchy (see below). The timestamps currently emit microseconds elapsed from a predetermined point in time (~start of rustc), but otherwise they are fully opaque, and should be only ever used to calculate the duration using `end - start`. We could also precompute the duration for the user in the `end` event, but that would require doing more work in rustc, which I would ideally like to avoid :P
- Do we want to have some form of hierarchy? I think that it would be nice to show some more granular sections rather than just frontend/backend/linker (e.g. macro expansion, typeck and borrowck as a part of the frontend). But for that we would need some way of representing hierarchy. A simple way would be something like `{ parent: "frontend" }`, but I realized that with start/end timestamps we get the hierarchy "for free", only the client will need to reconstruct it from the order of start/end events (e.g. `start A`, `start B` means that `B` is a child of `A`).
- What exactly do we want to stabilize? This is probably a question for later. I think that we should definitely stabilize the format of the emitted JSON objects, and *maybe* some specific section names (but we should also make it clear that they can be missing, e.g. you don't link everytime you invoke `rustc`).

The PR be tested e.g. with `rustc +stage1 src/main.rs --json=timings --error-format=json -Zunstable-options` on a crate without dependencies (it is not easy to use `--json` with stock Cargo, because it also passes this flag to `rustc`, so this will later need Cargo integration to be usable with it).

Zulip discussions: [#t-compiler > Outputting time spent in various compiler sections](https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler/topic/Outputting.20time.20spent.20in.20various.20compiler.20sections/with/518850162)

MCP: https://github.com/rust-lang/compiler-team/issues/873

r? ``@nnethercote``
2025-06-18 19:40:32 +02:00
Urgau
7c465447c8
Rollup merge of #141614 - rperier:lint_type-ir-to-type-middle, r=compiler-errors
lint direct use of rustc_type_ir

cc rust-lang/rust#138449

As previously discussed with `@lcnr,`  it is a lint to prevent direct use of rustc_type_ir, except for some internal crates (like next_trait_solver or rustc_middle for example).
2025-06-18 19:40:31 +02:00
Urgau
6e2a26eed9
Rollup merge of #138237 - reitermarkus:remove-escape-debug-inner, r=tgross35
Get rid of `EscapeDebugInner`.

I read the note on `EscapeDebugInner` and thought I'd give it a try.
2025-06-18 19:40:31 +02:00
Urgau
33185d3fd9
Rollup merge of #135656 - joshtriplett:hint-mostly-unused, r=saethlin
Add `-Z hint-mostly-unused` to tell rustc that most of a crate will go unused

This hint allows the compiler to optimize its operation based on this assumption, in order to compile faster. This is a hint, and does not guarantee any particular behavior.

This option can substantially speed up compilation if applied to a large dependency where the majority of the dependency does not get used. This flag may slow down compilation in other cases.

Currently, this option makes the compiler defer as much code generation as possible from functions in the crate, until later crates invoke those functions. Functions that never get invoked will never have code generated for them. For instance, if a crate provides thousands of functions, but only a few of them will get called, this flag will result in the compiler only doing code generation for the called functions. (This uses the same mechanisms as cross-crate inlining of functions.) This does not affect `extern` functions, or functions marked as `#[inline(never)]`.

This option has already existed in nightly as `-Zcross-crate-inline-threshold=always` for some time, and has gotten testing in that form. However, this option is still unstable, to give an opportunity for wider testing in this form.

Some performance numbers, based on a crate with many dependencies having just *one* large dependency set to `-Z hint-mostly-unused` (using Cargo's `profile-rustflags` option):

A release build went from 4m07s to 2m04s.

A non-release build went from 2m26s to 1m28s.
2025-06-18 19:40:30 +02:00
Vadim Petrochenkov
95cd989055 expand: Remove some unnecessary generic parameters 2025-06-18 20:34:20 +03:00
Urgau
4df9f2f841 Emit the usages suggestions as tool-only suggestions 2025-06-18 19:15:10 +02:00
Camille GILLOT
7fa94af556 Make feature suggestion more consistent. 2025-06-18 16:52:38 +00:00
Boxy
377d8fa4e3 Reviews 2025-06-18 17:51:22 +01:00
Shoyu Vanilla
70f376d308 fix: Closure capturing for let exprs 2025-06-19 01:30:10 +09:00
Jakub Beránek
a0a6db2496
Rollup merge of #142674 - hkBst:remove-duplicate-crashtest, r=bjorn3
remove duplicate crash test

I noticed near duplication between "library/alloctests/tests/testing/crash_test.rs" and "library/alloctests/testing/crash_test.rs" and wanted to try and remove that. The only difference is the path used to import `Debug`, but it seems not to matter. Perhaps my change is still wrong?

r? ``@bjorn3``
2025-06-18 18:06:55 +02:00
Jakub Beránek
ccacb4643d
Rollup merge of #142672 - Kobzol:bootstrap-tool-clarification, r=jieyouxu
Clarify bootstrap tools description

The existence of `stage0-bootstrap-tools` suggests the possiblity of `stage1/N-bootstrap-tools`, but that's not really a thing. Also it doesn't fit the new bootstrap model, where `stageN` essentially means that it was built with a `stageN-1` compiler (except for std).

r? ``@jieyouxu``
2025-06-18 18:06:54 +02:00
Jakub Beránek
e6e0826882
Rollup merge of #142666 - jieyouxu:skip-triagebot-check, r=Kobzol
Skip tidy triagebot linkcheck if `triagebot.toml` doesn't exist

Since distribution tarballs won't include `triagebot.toml`.

I think it's sufficiently obvious if `triagebot.toml` gets deleted entirely in PRs.

r? Kobzol
2025-06-18 18:06:53 +02:00
Jakub Beránek
e4b3a51ad6
Rollup merge of #142660 - joboet:rotating-joboet, r=tgross35
remove joboet from review rotation

I've been very busy recently and this has led to reviews feeling less like fun and more like an additional chore – in short: I need a break. I'm still around though and am happy to review PRs explicitly assigned to me.
2025-06-18 18:06:53 +02:00
Jakub Beránek
7cd4b5c828
Rollup merge of #142627 - Kobzol:bootstrap-metadata, r=jieyouxu
Add `StepMetadata` to describe steps

This is used to replace the previous downcasting of executed steps, which wasn't very scalable. In addition to tests, we could also use the metadata e.g. for tracing.

r? ```@jieyouxu```
2025-06-18 18:06:52 +02:00
Jakub Beránek
7b53cc06a0
Rollup merge of #142624 - Kobzol:bootstrap-fix-host, r=jieyouxu
Actually take `--build` into account in bootstrap

I went back 20 *stable* versions of Rust and I couldn't find this flag actually being used. Despite some of our CI workflows actually set this flag (!).

I added destructuring of the flags to make sure that this doesn't happen again. It found one more duplicated CLI flag.

r? ```@jieyouxu```
2025-06-18 18:06:52 +02:00
Jakub Beránek
2c4e0a9169
Rollup merge of #142619 - klensy:or_fun_call, r=nnethercote
apply clippy::or_fun_call

Applies https://rust-lang.github.io/rust-clippy/master/index.html?groups=nursery#or_fun_call to reduce needless allocs.
2025-06-18 18:06:51 +02:00
Jakub Beránek
ec295ad59c
Rollup merge of #142591 - Shourya742:2025-06-14-add-spawn-execution-api, r=Kobzol
Add spawn APIs for BootstrapCommand to support deferred command execution

This PR adds new deferred command support in the ExecutionContext and provides APIs to spawn commands and wait for their completion. This structure enables moving away from the start_process helper functions towards a more unified and reusable command execution flow.

r? ````@Kobzol````
2025-06-18 18:06:50 +02:00
Jakub Beránek
fd6b24f162
Rollup merge of #142383 - scottmcm:operandref-builder, r=workingjubilee
CodeGen: rework Aggregate implemention for rvalue_creates_operand cases

A non-trivial refactor pulled out from rust-lang/rust#138759
r? workingjubilee

The previous implementation I'd written here based on `index_by_increasing_offset` is complicated to follow and difficult to extend to non-structs.

This changes the implementation, without actually changing any codegen (thus no test changes either), to be more like the existing `extract_field` (<2b0274c71d/compiler/rustc_codegen_ssa/src/mir/operand.rs (L345-L425)>) in that it allows setting a particular field directly.

Notably I've found this one much easier to get right, in particular because having the `OperandRef<Result<V, Scalar>>` gives a really useful thing to include in ICE messages if something did happen to go wrong.
2025-06-18 18:06:50 +02:00
Jakub Beránek
62a36e611f Rollup merge of #141610 - BoxyUwU:stabilize_generic_arg_infer, r=lcnr,traviscross
Stabilize `feature(generic_arg_infer)`

Fixes rust-lang/rust#85077

r? lcnr

cc ````@rust-lang/project-const-generics````
2025-06-18 18:06:49 +02:00
Jakub Beránek
0093ca5c76
Rollup merge of #141610 - BoxyUwU:stabilize_generic_arg_infer, r=lcnr,traviscross
Stabilize `feature(generic_arg_infer)`

Fixes rust-lang/rust#85077

r? lcnr

cc ````@rust-lang/project-const-generics````
2025-06-18 18:06:49 +02:00
Jakub Beránek
ff146112f6
Rollup merge of #140774 - workingjubilee:should-force-frame-pointers-favor-the-target-or-cli, r=jieyouxu
Affirm `-Cforce-frame-pointers=off` does not override

This PR exists to document that we (that is, the compiler reviewer) implicitly made a decision in rust-lang/rust#86652 that defies the expectations of some programmers. Some programmers believe `-Cforce-frame-pointers=false` should obey the programmer in all cases, forcing the compiler to avoid generating frame pointers, even if the target specification would indicate they must be generated. However, many targets rely on frame pointers for fast or sound unwinding.

T-compiler had a weekly triage meeting on 2025-05-22. This topic was put to discussion because some programmers may expect the target-overriding behavior. In that meeting we decided removing frame pointers, at least with regards to the contract of the `-Cforce-frame-pointers` option, is not required, even if `=off` is passed, and that we will not do so if the target would expect them. This follows from the documentation here: https://doc.rust-lang.org/rustc/codegen-options/index.html#force-frame-pointers

We may separately pursue trying to clarify the situation more emphatically in our documentation, or warn when people pass the option when it doesn't do anything.
2025-06-18 18:06:48 +02:00
Camille GILLOT
c6e77b3ba6 Reduce uses of hir_crate. 2025-06-18 15:46:19 +00:00
lcnr
ecd65f870d evaluate_goal: accept different inputs 2025-06-18 17:22:04 +02:00
lcnr
75da5c4c29 reevaluate: reset encountered_overflow
also return `EvaluationResult` instead of the final
`StackEntry` to make sure we correctly track information
between reruns.
2025-06-18 17:14:01 +02:00
lcnr
8710c1fec9 update comment 2025-06-18 17:14:01 +02:00
lcnr
2e57845de7 actually use a doc comment 2025-06-18 17:14:01 +02:00
Mateusz Mikuła
d577b39c5a {aarch64,x86_64}-pc-windows-gnullvm: build host tools 2025-06-18 17:07:19 +02:00
bors
f9c15f40fb Auto merge of #142669 - GuillaumeGomez:subtree-update_cg_gcc_2025-06-18, r=GuillaumeGomez
Update GCC backend subtree
2025-06-18 15:00:10 +00:00
Boxy
6c7830e75d
Merge pull request #2474 from BoxyUwU/ambig_unambig_ty_consts
Document Ambig vs Unambig Type/Consts
2025-06-18 15:30:14 +01:00
Boxy
39e98006ac Reviews 2025-06-18 15:28:44 +01:00
David Wood
b93020257e
hir_analysis: add #![rustc_no_implicit_bounds]
Adds a new `rustc_attrs` attribute that stops rustc from adding any
default bounds. Useful for tests where default bounds just add noise and
make debugging harder.
2025-06-18 14:22:29 +00:00
Tomasz Miąsko
8e266d999d Preserve caches in a call to shrink_to_fit 2025-06-18 16:16:45 +02:00
Marijn Schouten
2c434edf24 remove duplicate crash test 2025-06-18 14:04:02 +00:00
Romain Perier
a1a3bef6f0 Implement lint against direct uses of rustc_type_ir in compiler crates
This commit adds a lint to prevent the use of rustc_type_ir in random
compiler crates, except for type system internals traits, which are
explicitly allowed. Moreover, this fixes diagnostic_items() to include
the CRATE_OWNER_ID, otherwise rustc_diagnostic_item attribute is ignored
on the crate root.
2025-06-18 16:01:41 +02:00
Guillaume Gomez
6bbf8b1098 GCC backend: Remove add_eval if no function is created 2025-06-18 15:31:01 +02:00
Guillaume Gomez
864840512b GCC backend: Remove add_eval if no function is created 2025-06-18 15:31:01 +02:00
Guillaume Gomez
efb79975f6 Merge commit 'fda0bb9588' into subtree-update_cg_gcc_2025-06-18 2025-06-18 15:11:44 +02:00
Guillaume Gomez
c48d8d4d80 Merge commit 'fda0bb9588' into subtree-update_cg_gcc_2025-06-18 2025-06-18 15:11:44 +02:00
Jakub Beránek
48e52bb200
Fix compiletest and rustc-dev-guide 2025-06-18 15:07:36 +02:00
yanglsh
77ef3d7e42 fix: branches_sharing_code suggests misleadingly when in assignment 2025-06-18 21:06:04 +08:00
Jakub Beránek
6be97a0b0c
Clarify bootstrap tool description and change its directory to simply bootstrap-tools 2025-06-18 15:03:56 +02:00
Jana Dönszelmann
7f49de2cca
fixup missing docs in attr parsing 2025-06-18 14:46:12 +02:00
Marijn Schouten
021bcb9b4c fmt tests: remove static mut 2025-06-18 12:29:22 +00:00
Jana Dönszelmann
3c418ec505
bump rustdoc json format number for pretty print change of attribute 2025-06-18 14:04:54 +02:00
Marijn Schouten
5bd918fcd8 vec_deque tests: remove static mut 2025-06-18 11:51:40 +00:00
Jana Dönszelmann
815f0b71c7
better template for repr attributes 2025-06-18 13:48:42 +02:00
Jana Dönszelmann
b64fd13a04
convert the optimize attribute to a new parser 2025-06-18 13:48:42 +02:00
Josh McKinney
b4f09d75e4
Add --color=always to test explorer command
Fixes https://github.com/rust-lang/rust-analyzer/issues/20030
2025-06-18 04:46:58 -07:00