Commit graph

165159 commits

Author SHA1 Message Date
Jakub Beránek
0acfe86faa
Manually optimize steps performed by x clippy ci 2025-08-13 08:11:00 +02:00
Jakub Beránek
92e1541f76
Only check rustc when linting rustc_codegen_gcc 2025-08-13 08:11:00 +02:00
Jakub Beránek
75c5c36c0f
Add change tracker entry 2025-08-13 08:11:00 +02:00
Jakub Beránek
27347831bd
Lint code in CI using in-tree Clippy 2025-08-13 08:11:00 +02:00
Jakub Beránek
23bb607184
Add more tests 2025-08-13 08:11:00 +02:00
Jakub Beránek
87d92eecf9
Fix staging of linting tools 2025-08-13 08:11:00 +02:00
Jakub Beránek
c5dac1aa2a
Fix staging for x clippy std 2025-08-13 08:11:00 +02:00
Jakub Beránek
2071a68bd6
Add snapshot test for x clippy std 2025-08-13 08:11:00 +02:00
Jakub Beránek
5ffd5c2ec2
Fix Clippy staging for compiler 2025-08-13 08:11:00 +02:00
Jakub Beránek
ba27938c8c
Add snapshot test for x clippy ci 2025-08-13 08:11:00 +02:00
Jakub Beránek
d2165674e7
Forbid running Clippy on stage 0 2025-08-13 08:11:00 +02:00
Jakub Beránek
5d1535ca29
Implement clippy::CodegenGcc as a separate step
To correctly pass `RustcPrivateCompilers` to it and to avoid running it on `x clippy compiler`.
2025-08-13 08:11:00 +02:00
Jakub Beránek
6e7e243ef2
Prepare standard library for checking rustc in prepare_compiler_for_check 2025-08-13 08:07:55 +02:00
bors
1553adfe68 Auto merge of #145295 - Kobzol:unify-stages, r=jieyouxu
Consolidate stage directories and group logs in bootstrap

My post-stage-0-redesign bootstrap fixes aren't done yet, but I think that enough steps have been migrated to the new system that it makes sense to actually modify the directories on disk, and what gets printed when bootstrap runs, so that it actually corresponds to the new system. Before, the printed stages didn't always make sense.

This PR:
- Fixes the numbering of `stageN` directories in the build directory. It was not corresponding to the correct stages before; notice that I did not modify `bootstrap/README.md`, as it was essentially describing what happens after this PR (first commit).
- Unifies all steps that output a build group to use the `Builder::msg` method. It's probably not the final stage, and some of the test steps might not be fully accurate yet, because I didn't fix test step numbering yet, but I think that it's a clear improvement from before, and now that everything uses the same method, we can easily make changes across the board, to ensure that it stays unified (second commit).

r? `@jieyouxu`

try-job: dist-x86_64-msvc
try-job: dist-x86_64-linux
2025-08-12 21:06:10 +00:00
Jakub Beránek
4360c52c4f Add change tracker entry 2025-08-12 18:40:42 +02:00
Jakub Beránek
72b606db89 Replace stage0-tools-bin with stage1-tools-bin 2025-08-12 18:39:09 +02:00
bors
8e62bfd311 Auto merge of #144678 - jdonszelmann:no-mangle-extern, r=bjorn3
Make no_mangle on foreign items explicit instead of implicit

for a followup PR I'm working on I need some foreign items to mangle. I could add a new attribute: `no_no_mangle` or something silly like that but by explicitly putting `no_mangle` in the codegen fn attrs of foreign items we can default it to `no_mangle` and then easily remove it when we don't want it.

I guess you'd know about this r? `@bjorn3.` Shouldn't be too hard to review :)

Builds on rust-lang/rust#144655 which should merge first.
2025-08-12 16:20:24 +00:00
Jakub Beránek
f7defc0fe5
Resolve review remarks 2025-08-12 15:05:05 +02:00
Stuart Cook
04f29fde10
Rollup merge of #145291 - Zalathar:no-warning, r=Kobzol
bootstrap: Only warn about `rust.debug-assertions` if downloading rustc

The changes in rust-lang/rust#145149 had the unwanted side-effect of causing bootstrap to *always* warn about `rust.debug-assertions = true`, even if rustc isn't going to be downloaded anyway.

cc ``@Shourya742`` ``@Kobzol``
2025-08-12 20:37:59 +10:00
Stuart Cook
2102eebd56
Rollup merge of #145273 - estebank:not-not, r=samueltardieu
Account for new `assert!` desugaring in `!condition` suggestion

`rustc` in https://github.com/rust-lang/rust/pull/122661 is going to change the desugaring of `assert!` to be

```rust
match condition {
    true => {}
    _ => panic!(),
}
```
which will make the edge-case of `condition` being `impl Not<Output = bool>` while not being `bool` itself no longer a straightforward suggestion, but `!!condition` will coerce the expression to be `bool`, so it can be machine applicable.

Transposing https://github.com/rust-lang/rust-clippy/pull/15453/ to the rustc repo.

r? `````@samueltardieu`````
2025-08-12 20:37:57 +10:00
Stuart Cook
0264abc065
Rollup merge of #145263 - rustbot:docs-update, r=ehuss
Update books

## rust-lang/reference

6 commits in 1be151c051a082b542548c62cafbcb055fa8944f..59b8af811886313577615c2cf0e045f01faed88b
2025-08-10 18:21:53 UTC to 2025-08-08 01:00:04 UTC

- Add LoongArch32 to inline-assembly documentation (rust-lang/reference#1942)
- Update `no_builtins` to use the attribute template (rust-lang/reference#1909)
- Update `global_allocator` to use the attribute template (rust-lang/reference#1919)
- Update `windows_subsystem` to use the attribute template (rust-lang/reference#1920)
- Remove note on accepted invalid `should_panic` syntax (rust-lang/reference#1955)
- specify relative drop order of pattern bindings (rust-lang/reference#1953)

## rust-lang/rust-by-example

1 commits in bd1279cdc9865bfff605e741fb76a0b2f07314a7..adc1f3b9012ad3255eea2054ca30596a953d053d
2025-08-08 12:02:24 UTC to 2025-08-08 12:02:24 UTC

- Update Chinese translations in `zh.po` (rust-lang/rust-by-example#1950)
2025-08-12 20:37:57 +10:00
Stuart Cook
1c38519319
Rollup merge of #145253 - Kobzol:pr-check-2-doc-stage-1, r=jieyouxu
Document compiler and stdlib in stage1 in `pr-check-2` CI job

This restores the original behavior pre-https://github.com/rust-lang/rust/pull/145011 (I thought that stage 2 makes more sense here, but it made the job ~30m slower, which is bad).

Let's see what will be the "new" duration, it should be ~55 minutes.

r? ```````@jieyouxu```````
2025-08-12 20:37:55 +10:00
Stuart Cook
42af95b18e
Rollup merge of #145251 - tiif:support_trait, r=BoxyUwU
Support using #[unstable_feature_bound] on trait

This is needed to unblock https://github.com/rust-lang/rust/pull/145095

r? ```````@BoxyUwU```````
2025-08-12 20:37:55 +10:00
Stuart Cook
769d32b117
Rollup merge of #145249 - Stypox:_span-to-_trace, r=joshtriplett
Rename entered trace span variables from `_span` to  `_trace`

This PR just changes the name of `EnteredTraceSpan` variables used to automatically close tracing spans when going out of scope. This renaming was needed because `_span` could possibly be confused with the `Span` type in rustc, so I used `_trace` as suggested in https://github.com/rust-lang/rust/pull/144727#discussion_r2247267670.
2025-08-12 20:37:54 +10:00
Stuart Cook
d862ae2fce
Rollup merge of #145238 - estebank:attr-overhaul, r=jdonszelmann
Tweak invalid builtin attribute output

 - Add link to reference/docs when possible
 - More accurate suggestions by supporting multiple alternative suggestions

```
error: malformed `crate_type` attribute input
  --> $DIR/crate-type-macro-call.rs:1:1
   |
LL | #![crate_type = foo!()]
   | ^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: for more information, visit <https://doc.rust-lang.org/reference/linkage.html>
help: the following are the possible correct uses
   |
LL - #![crate_type = foo!()]
LL + #![crate_type = "bin"]
   |
LL - #![crate_type = foo!()]
LL + #![crate_type = "cdylib"]
   |
LL - #![crate_type = foo!()]
LL + #![crate_type = "dylib"]
   |
LL - #![crate_type = foo!()]
LL + #![crate_type = "lib"]
   |
   = and 4 other candidates
```
2025-08-12 20:37:53 +10:00
Stuart Cook
38483d8eb1
Rollup merge of #145216 - eval-exec:fix-145125-enum-rustdoc, r=fmease
rustdoc: correct negative-to-implicit discriminant display

This PR want to fix rust-lang/rust#145125

In:
7f7b8ef27d/compiler/rustc_middle/src/ty/util.rs (L33-L38)

the `Discr`'s `val` field is `u128`, so we can't use `discr.val as i128` to represent `Discr`'s signed value.

We should use `Discr`'s `Display` trait to display signed value.

7f7b8ef27d/compiler/rustc_middle/src/ty/util.rs (L60-L73)
2025-08-12 20:37:52 +10:00
Stuart Cook
31e5316cd9
Rollup merge of #144921 - lolbinarycat:rustdoc-intra-doc-gfm-141866, r=fmease,GuillaumeGomez
Don't emit `rustdoc::broken_intra_doc_links` for GitHub-flavored Markdown admonitions like `[!NOTE]`

fixes rust-lang/rust#141866
2025-08-12 20:37:50 +10:00
Stuart Cook
378a26f165
Rollup merge of #144386 - camsteffen:imploftrait, r=fmease
Extract TraitImplHeader in AST/HIR

Several fields of `Impl` are only applicable when it's a trait impl. This moves those fields into a new struct that is only present for trait impls.
2025-08-12 20:37:49 +10:00
Stuart Cook
f22c389169
Rollup merge of #131477 - madsmtm:sdkroot-via-env-var, r=nnethercote
Apple: Always pass SDK root when linking with `cc`, and pass it via `SDKROOT` env var

Fixes https://github.com/rust-lang/rust/issues/80817, fixes https://github.com/rust-lang/rust/issues/96943, and generally simplifies our linker invocation on Apple platforms.

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

### Necessary background on trampoline binaries

The developer binaries such as `/usr/bin/cc` and `/usr/bin/clang` are actually trampolines (similar in spirit to the Rust binaries in `~/.cargo/bin`) which effectively invokes `xcrun` to get the current Xcode developer directory, which allows it to find the actual binary under `/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/*`.

This binary is then launched with the following environment variables set (but none of them are set if `SDKROOT` is set explicitly):
- `SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk`
- `LIBRARY_PATH=/usr/local/lib` (appended)
- `CPATH=/usr/local/include` (appended)
- `MANPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/share/man:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/share/man:/Applications/Xcode.app/Contents/Developer/usr/share/man:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man:` (prepended)

This allows the user to type e.g. `clang foo.c` in their terminal on macOS, and have it automatically pick up a suitable Clang binary and SDK from either an installed Xcode.app or the Xcode Command Line Tools.
(It acts roughly as-if you typed `xcrun -sdk macosx clang foo.c`).

### Finding a suitable SDK

All compilation on macOS is cross-compilation using SDKs, there are no system headers any more (`/usr/include` is gone), and the system libraries are elsewhere in the file system (`/usr/lib` is basically empty). Instead, the logic for finding the SDK is handled by the `/usr/bin/cc` trampoline (see above).

But relying on the `cc` trampoline doesn't work when:
- Cross-compiling, since a different SDK is needed there.
- Invoking the linker directly, since the linker doesn't understand `SDKROOT`.
- Linking build scripts inside Xcode (see https://github.com/rust-lang/rust/issues/80817), since Xcode prepends `/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin` to `PATH`, which means `cc` refers to the _actual_ Clang binary, and we end up with the wrong SDK root specified.

Basically, we cannot rely on the trampoline at all, so the last commit removes the special-casing that was done when linking with `cc` for macOS (i.e. the most common path), so that **we now always invoke `xcrun` (if `SDKROOT` is not explicitly specified) to find the SDK root**.

Making sure this is non-breaking has a few difficulties though, namely that the user might not have Xcode installed, and that the compiler driver may not understand the `-isysroot` flag. These difficulties are explored below.

#### No Xcode

There are several compiler drivers which work without Xcode by bundling their own SDK, including `zig cc`, Nixpkgs' `clang` and Homebrew's `llvm` package. Additionally, `xcrun` is rarely available when cross-compiling from non-macOS and instead the user might provide a downloaded SDK manually with `-Clink-args=...`.

We do still want to _try_ to invoke `xcrun` if possible, since it is usually the SDK that the user wants (and if not, the environment should override `xcrun`, such as is done by Nixpkgs). But we do not want failure to invoke `xcrun` to stop the linking process. This is changed in the second-to-last commit.

#### `SDKROOT` vs. `-isysroot`

The exact reasoning why we do not always pass the SDK root when linking on macOS eludes me (the git history dead ends in rust-lang/rust#100286), but I suspect it's because we want to support compiler drivers which do not support the `-isysroot` option.

To make sure that such use-cases continue to work, we now pass the SDK root via the `SDKROOT` environment variable. This way, compiler drivers that support setting the SDK root (such as Clang and GCC) can use it, while compiler drivers that don't (presumably because they figure out the SDK in some other way) can just ignore it.

One small danger here would be if there's some compiler driver out there which works with the `-isysroot` flag, but not with the `SDKROOT` environment variable. I am not aware of any?

In a sense, this also shifts the blame; if a compiler driver does not understand `SDKROOT`, it won't work with e.g. `xcrun -sdk macosx15.0 $tool` either, so it can more clearly be argued that this is incorrect behaviour on the part of the tool.

Note also that this overrides the behaviour discussed above (`/usr/bin/cc` sets some extra environment variables), I will argue that is fine since `MANPATH` and `CPATH` is useless when linking, and `/usr/local/lib` is empty on a default system at least since macOS 10.14 (it might be filled by extra libraries installed by the user, but I'll argue that if we want it to be part of the default library search path, we should set it explicitly so that it's also set when linking with `-Clinker=ld`).

### Considered alternatives

- Invoke `/usr/bin/cc` instead of `cc`.
  - This breaks many other use-cases though where overriding `cc` in the PATH is desired.
- Look up `which cc`, and do special logic if in Xcode toolchain.
  - Seems brittle, and besides, it's not the `cc` in the Xcode toolchain that's wrong, it's the `/usr/bin/cc` behaviour that is a bit too magical.
- Invoke `xcrun --sdk macosx cc`.
  - This completely ignores `SDKROOT`, so we'd still have to parse that first to figure out if it's suitable or not, but would probably be workable.
- Maybe somehow configure the linker with extra flags such that it'll be able to link regardless of linking for macOS or e.g. iOS? Though I doubt this is possible.
- Bundle the SDK, similar to `zig-cc`.
  - Comes with it's own host of problems.

### Testing

Tested that this works with the following `-Clinker=...`:
- [x] Default (`cc`)
- [x] `/usr/bin/ld`
- [x] Actual Clang from Xcode (`/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang`)
- [x] `/usr/bin/clang` (invoked via `clang` instead of `cc`)
- [x] Homebrew's `llvm` package (ignores `SDKROOT`, uses their own SDK)
- [x] Homebrew's `gcc` package (`SDKROOT` is preferred over their own SDK)
- [x] ~Macports `clang`~ Couldn't get it to build
- [x] Macports `gcc` (`SDKROOT` is preferred over their own SDK)
- [x] Zig CC installed via. homebrew (ignores both `-isysroot` and `SDKROOT`, uses their own SDK)
- [x] Nixpkgs `clang` (ignores `SDKROOT`, uses their own SDK)
- [x] Nixpkgs `gcc` (ignores `SDKROOT`, uses their own SDK)
- [x] ~[`cosmocc`](https://github.com/jart/cosmopolitan)?~ Doesn't accept common flags (like `-arch`)

CC ```````@BlackHoleFox``````` ```````@thomcc```````
2025-08-12 20:37:48 +10:00
Jana Dönszelmann
7aa8707639
make no_mangle explicit on foreign items 2025-08-12 12:07:14 +02:00
Jakub Beránek
df2da84a61
Change format of messages in Builder::fmt 2025-08-12 10:42:14 +02:00
Jakub Beránek
fbfcfa6bce
Unify all groups in bootstrap to use Builder::msg 2025-08-12 10:15:56 +02:00
Jakub Beránek
a279ba4349
Consolidate stageN directories in the build directory
Now stageN-X corresponds to stage N X, as it should.
2025-08-12 09:45:25 +02:00
Zalathar
e454022422 bootstrap: Only warn about rust.debug-assertions if downloading rustc 2025-08-12 17:14:57 +10:00
Cameron Steffen
bf266dc834 Propagate TraitImplHeader to hir 2025-08-11 17:05:42 -05:00
Cameron Steffen
5bc23ce255 Extract ast TraitImplHeader 2025-08-11 17:05:36 -05:00
Esteban Küber
86853b3758 Account for new assert! desugaring in !condition suggestion
`rustc` is going to change the desugaring of `assert!` to be

```rust
match condition {
    true => {}
    _ => panic!(),
}
```
which will make the edge-case of `condition` being `impl Not<Output = bool>`
while not being `bool` itself no longer a straightforward suggestion,
but `!!condition` will coerce the expression to be `bool`, so it can be
machine applicable.
2025-08-11 21:38:44 +00:00
Mads Marquart
1cc44bfd22 Pass Apple SDK root to compiler driver via SDKROOT env var
This is more in-line with what Apple's tooling expects, and allows us to
better support custom compiler drivers (such as certain Homebrew and
Nixpkgs compilers) that prefer their own `-isysroot` flag.

Effectively, we now invoke the compiler driver as-if it was invoked as
`xcrun -sdk $sdk_name $tool`.
2025-08-11 22:29:00 +02:00
Esteban Küber
928dd11437 fix clippy test 2025-08-11 20:04:27 +00:00
bors
1ebbd87a62 Auto merge of #145254 - GuillaumeGomez:rollup-7bp43pv, r=GuillaumeGomez
Rollup of 4 pull requests

Successful merges:

 - rust-lang/rust#144966 ( Improve suggestion for "missing function argument" on multiline call)
 - rust-lang/rust#145111 (remove some unused private trait impls)
 - rust-lang/rust#145221 (Fix Cargo cross-compilation (take two))
 - rust-lang/rust#145247 (Update `sysinfo` version to `0.37.0`)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-08-11 19:28:22 +00:00
rustbot
50d8b80aab Update books 2025-08-11 19:00:21 +02:00
bors
6355cd39c8 Auto merge of #145207 - Kobzol:codegen-backend-clif-dist, r=jieyouxu
Ship correct Cranelift library in its dist component

The first commit adds a post-dist UI test to check that Cranelift can be used with the extracted dist x64 Linux archive.

The original codegen copy logic in the Cranelift dist step was a bit redundant, and I didn't notice in https://github.com/rust-lang/rust/pull/144787 that it's copying the codegen backend from the build compiler's sysroot, rather than the target compiler's sysroot. The second commit modifies the logic to directly access the built codegen file (there is no need to search for it in the compiler's sysroot, in fact when you run just `x dist rustc_codegen_cranelift`, it shouldn't "taint" the sysroot with the codegen backend! Which it did before https://github.com/rust-lang/rust/pull/144787) and copy it to the tarball under a normalized name. Thus we get around any similar potential issues in the future, and make previously implicit logic more explicit.

This also fixes running just `x dist rustc_codegen_cranelift` without enabling `cranelift` in `rust.codegen-backends`, which should have been enabled by https://github.com/rust-lang/rust/pull/144787, but it didn't work fully, because the dist step tried to copy the codegen backend from the compiler's sysroot, but it didn't contain the codegen backend if it was not enabled by `rust.codegen-backends`.

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

try-job: dist-x86_64-linux
2025-08-11 16:13:06 +00:00
binarycat
c022ed9927 don't emit rustdoc::broken_intra_doc_links for stuff like [!NOTE] 2025-08-11 10:50:44 -05:00
Jakub Beránek
79a134ac89
Document compiler and stdlib in stage1 in pr-check-2 CI job 2025-08-11 17:39:52 +02:00
Guillaume Gomez
c2915051bd
Rollup merge of #145247 - GuillaumeGomez:update-sysinfo, r=Kobzol
Update `sysinfo` version to `0.37.0`

Some small performance improvements and internal cleanups.
2025-08-11 16:19:06 +02:00
Guillaume Gomez
eee9e60afb
Rollup merge of #145221 - Kobzol:cargo-dist-fix-2, r=jieyouxu
Fix Cargo cross-compilation (take two)

In https://github.com/rust-lang/rust/pull/145083, I fixed the case of manually invoking `x dist cargo`, but I realized that `x install` creates the `tool::Cargo` step through the `from_build_frompiler` constructor, which doesn't go through `get_tool_target_compiler`. So we just prepare both the host and target stdlibs directly before building Cargo. Ideally we would get rid of `from_build_compiler`, but that will require refactoring the dist and test steps, which is upcoming.

Hopefully fixes https://github.com/rust-lang/rust/issues/145059 for good.
2025-08-11 16:19:05 +02:00
tiif
9a8facbe53 Update rustc dev guide 2025-08-11 13:28:23 +00:00
Stypox
cd4676c40d
Turn _span into _trace as trace span name
_span could possibly be confused with the Span type in rustc
2025-08-11 14:45:46 +02:00
Guillaume Gomez
eff5315cb1 Update sysinfo version to 0.37.0 2025-08-11 14:21:01 +02:00
bors
fce0e74720 Auto merge of #145215 - Kobzol:rust-backtrace, r=marcoieni
Enable RUST_BACKTRACE=1 on CI

We should really see the backtrace if something in bootstrap fails on CI. https://github.com/rust-lang/rust/pull/145011#issuecomment-3172664934 doesn't show many details.
2025-08-11 12:16:56 +00:00