34429 Commits

Author SHA1 Message Date
Lukas Wirth
5242ea6ca7
Merge pull request #19597 from Kobzol/arm-ci
Build aarch64 builds on CI with PGO
2025-04-16 07:43:34 +00:00
Prajwal S N
243854211c
fix: use ast::TokenTree in make::expr_macro
Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
2025-04-16 13:06:42 +05:30
Lukas Wirth
d5a3d14cac
Merge pull request #19596 from roife/sig-help-info
feat: enhance signature help to display generic parameters for callables and default values for generic args
2025-04-16 07:27:21 +00:00
Lukas Wirth
50d6f18349
Merge pull request #19588 from Hmikihiro/ext_func_module
fix: `Extract into` function include inline variable in fmt macro
2025-04-16 07:15:15 +00:00
Lukas Wirth
94f984f908
Merge pull request #19587 from MatrixFrog/patch-1
Remove incorrect doc comment
2025-04-16 07:12:35 +00:00
Lukas Wirth
b75b78b9d9
Merge pull request #19600 from Kobzol/pin-proc-macro-rustc
Pin rustc used for the `proc-macro-src` CI job
2025-04-16 07:09:24 +00:00
Jakub Beránek
263092085d
Pin rustc used for the proc-macro-src CI job 2025-04-16 08:58:25 +02:00
bors
d638e47e11 Auto merge of #136926 - wesleywiser:stabilize_dwarf-version, r=petrochenkov
Stabilize `-Zdwarf-version` as `-Cdwarf-version`

I propose stabilizing `-Zdwarf-version` as `-Cdwarf-version`. This PR adds a new `-Cdwarf-version` flag, leaving the unstable `-Z` flag as is to ease the transition period. The `-Z` flag will be removed in the future.

# `-Zdwarf-version` stabilization report

## What is the RFC for this feature and what changes have occurred to the user-facing design since the RFC was finalized?

No RFC/MCP, this flag was added in https://github.com/rust-lang/rust/pull/98350 and was not deemed large enough to require additional process.

The tracking issue for this feature is #103057.

## What behavior are we committing to that has been controversial? Summarize the major arguments pro/con.

None that has been extensively debated but there are a few questions that could have been chosen differently:

1. What should the flag name be?
  The current flag name is very specific to DWARF. Other debuginfo formats exist (msvc's CodeView format or https://en.wikipedia.org/wiki/Stabs) so we could have chosen to generalize the flag name (`-{C,Z} debuginfo-version=dwarf-5` for example). While this would extend cleanly to support formats other than DWARF, there are some downsides to this design. Neither CodeView nor Stabs have specification or format versions so it's not clear what values would be supported beyond `dwarf-{2,3,4,5}` or `codeview`. We would also need to take care to ensure the name does not lead users to think they can pick a format other than one supported by the target. For instance, what would `--target x86_64-pc-windows-msvc -Cdebuginfo-version=dwarf-5` do?

2. What is the behavior when flag is used on targets that do not support DWARF?
  Currently, passing `-{C,Z} dwarf-version` on targets like `*-windows-msvc` does not do anything. It may be preferable to emit a warning alerting the user that the flag has no effect on the target platform. Alternatively, we could emit an error but this could be annoying since it would require the use of target specific RUSTFLAGS to use the flag correctly (and there isn't a way to target "any platform that uses DWARF" using cfgs).

3. Does the precompiled standard library potentially using a different version of DWARF a problem?
  I don't believe this is an issue as debuggers (and other such tools) already must deal with the possibility that an application uses different DWARF versions across its statically or dynamically linked libraries.

## Are there extensions to this feature that remain unstable? How do we know that we are not accidentally committing to those.

No extensions per se, although future DWARF versions could be considered as such. At present, we validate the requested DWARF version is between 2 and 5 (inclusive) so new DWARF versions will not automatically be supported until the validation logic is adjusted.

## Summarize the major parts of the implementation and provide links into the code (or to PRs)

- Targets define their preferred or default DWARF version: 34a5ea911c/compiler/rustc_target/src/spec/mod.rs (L2369)
- We use the target default but this can be overriden by `-{C,Z} dwarf-version` 34a5ea911c/compiler/rustc_session/src/session.rs (L738)
- The flag is validated 34a5ea911c/compiler/rustc_session/src/session.rs (L1253-L1258)
- When debuginfo is generated, we tell LLVM to use the requested value or the target default 34a5ea911c/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs (L106)

## Summarize existing test coverage of this feature

- Test that we actually generate the appropriate DWARF version
  - https://github.com/rust-lang/rust/blob/master/tests/assembly/dwarf5.rs
  - https://github.com/rust-lang/rust/blob/master/tests/assembly/dwarf4.rs
- Test that LTO with different DWARF versions picks the highest version
  - https://github.com/rust-lang/rust/blob/master/tests/assembly/dwarf-mixed-versions-lto.rs
- Test DWARF versions 2-5 are valid while 0, 1 and 6 report an error
  - https://github.com/rust-lang/rust/blob/master/tests/ui/debuginfo/dwarf-versions.rs
- Ensure LLVM does not report a warning when LTO'ing different DWARF versions together
  - https://github.com/rust-lang/rust/blob/master/tests/ui/lto/dwarf-mixed-versions-lto.rs

## Has a call-for-testing period been conducted? If so, what feedback was received?

No call-for-testing has been conducted but Rust for Linux has been using this flag without issue.

## What outstanding bugs in the issue tracker involve this feature? Are they stabilization-blocking?

All reported bugs have been resolved.

## Summarize contributors to the feature by name for recognition and assuredness that people involved in the feature agree with stabilization

- Initial implementation in https://github.com/rust-lang/rust/pull/98350 by `@pcwalton`
- Stop emitting `.debug_pubnames` and `.debug_pubtypes` when using DWARF 5 in https://github.com/rust-lang/rust/pull/117962 by `@weihanglo.`
- Refactoring & cleanups (#135739), fix LLVM warning on LTO with different DWARF versions (#136659) and argument validation (#136746) by `@wesleywiser`

## What FIXMEs are still in the code for that feature and why is it ok to leave them there?

No FIXMEs related to this feature.

## What static checks are done that are needed to prevent undefined behavior?

This feature cannot cause undefined behavior.
We ensure the DWARF version is one of the supported values [here](34a5ea911c/compiler/rustc_session/src/session.rs (L1255-L1257)).

## In what way does this feature interact with the reference/specification, and are those edits prepared?

No changes to reference/spec, unstable rustc docs are moved to the stable book as part of the stabilization PR.

## Does this feature introduce new expressions and can they produce temporaries? What are the lifetimes of those temporaries?

No.

## What other unstable features may be exposed by this feature?

`-Zembed-source` requires use of DWARF 5 extensions but has its own feature gate.

## What is tooling support like for this feature, w.r.t rustdoc, clippy, rust-analzyer, rustfmt, etc.?

No support needed for rustdoc, clippy, rust-analyzer, rustfmt or rustup.

Cargo could expose this as an option in build profiles but I would expect the decision as to what version should be used would be made for the entire crate graph at build time rather than by individual package authors.

cc-rs has support for detecting the presence of `-{C,Z} dwarf-version` in `RUSTFLAGS` and providing the corresponding flag to Clang/gcc (https://github.com/rust-lang/cc-rs/pull/1395).

---

Closes #103057
2025-04-16 06:38:00 +00:00
bors
d4d056ae44 Auto merge of #139768 - compiler-errors:split-fold, r=lcnr
Split `TypeFolder` and `FallibleTypeFolder` atwain

Right now there is a coherence problem with `TypeFolder` and `FallibleTypeFolder`. Namely, it's impossible to implement a `FallibleTypeFolder` that is generic over interner, b/c it has a *downstream* conflict with the blanket impl:

```
impl<I, F> FallibleTypeFolder<I> for F where F: TypeFolder<I> {}
```

Because downstream crates may implement `TypeFolder<SomeLocalInterner>` for the fallible type folder.

This PR removes the relationship between `FallibleTypeFolder` and `TypeFolder`; it leads to *modest* code duplication, but otherwise does not affect perf and really doesn't matter in general.
2025-04-16 01:46:01 +00:00
Jakub Beránek
16526809fe Perform PGO for aarch64 builds 2025-04-15 22:03:16 +02:00
Laurențiu Nicola
bdd0491668
Merge pull request #19595 from Kobzol/ci-linux-pgo
Use PGO on Linux x64 builds
2025-04-15 18:51:24 +00:00
roifewu
727d4b184d feat: enhance signature help to display generic parameters for callables and default values for generic args 2025-04-16 02:41:08 +08:00
Jakub Beránek
78043e9211 Use PGO on Linux x64 builds 2025-04-15 20:32:23 +02:00
Laurențiu Nicola
f766d1403e
Merge pull request #19585 from Kobzol/pgo-windows
Allow training PGO on a custom crate and enable it Windows on CI
2025-04-15 18:10:59 +00:00
bors
a70ab55407 Auto merge of #138906 - thaliaarchi:unsupported-test-exe, r=bjorn3
Reject test executables when not supported by target

Currently, compiling tests for SOLID produces an ICE, because SOLID does not support executables.

See https://github.com/rust-lang/rust/issues/138047
2025-04-15 16:05:15 +00:00
Laurențiu Nicola
0a60ce6c8e
Merge pull request #19586 from Kobzol/manylinux-instead-of-zigbuild
Use a Docker container instead of Zig for building with old(er) glibc on x64 Linux
2025-04-15 14:10:13 +00:00
Jakub Beránek
4633fbf146
Use manylinux Docker container instead of zigbuild for x64 Linux
This gets us glibc 2.28 without using `cargo zigbuild`, which is not compatible with PGO.
2025-04-15 15:42:40 +02:00
bors
a8daf8eb5b Auto merge of #139632 - Darksonn:cfi-fmt, r=m-ou-se
cfi: do not transmute function pointers in formatting code

Follow-up to #115954.
Addresses #115199 point 2.
Related to #128728.
Discussion [on the LKML](https://lore.kernel.org/all/20250410115420.366349-1-panikiel@google.com/).

cc `@maurer` `@rcvalle` `@RalfJung`
2025-04-15 11:11:31 +00:00
Jakub Beránek
e12d15d119
Use -q to silence RA output 2025-04-15 12:46:56 +02:00
Jakub Beránek
07307f5654
Run PGO for Windows on CI 2025-04-15 12:18:09 +02:00
Jakub Beránek
813ea83e5f
Allow passing a specific crate for PGO training 2025-04-15 11:25:16 +02:00
Jakub Beránek
136bf7f734
Fix llvm-profdata extension on non Linux OSes 2025-04-15 11:19:37 +02:00
bors
97b5caa19b Auto merge of #139845 - Zalathar:rollup-u5u5y1v, r=Zalathar
Rollup of 17 pull requests

Successful merges:

 - #138374 (Enable contracts for const functions)
 - #138380 (ci: add runners for vanilla LLVM 20)
 - #138393 (Allow const patterns of matches to contain pattern types)
 - #139517 (std: sys: process: uefi: Use NULL stdin by default)
 - #139554 (std: add Output::exit_ok)
 - #139660 (compiletest: Add an experimental new executor to replace libtest)
 - #139669 (Overhaul `AssocItem`)
 - #139671 (Proc macro span API redesign: Replace proc_macro::SourceFile by Span::{file, local_file})
 - #139750 (std/thread: Use default stack size from menuconfig for NuttX)
 - #139772 (Remove `hir::Map`)
 - #139785 (Let CStrings be either 1 or 2 byte aligned.)
 - #139789 (do not unnecessarily leak auto traits in item bounds)
 - #139791 (drop global where-bounds before merging candidates)
 - #139798 (normalize: prefer `ParamEnv` over `AliasBound` candidates)
 - #139822 (Fix: Map EOPNOTSUPP to ErrorKind::Unsupported on Unix)
 - #139833 (Fix some HIR pretty-printing problems)
 - #139836 (Basic tests of MPMC receiver cloning)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-15 08:02:23 +00:00
Stuart Cook
230578904b
Rollup merge of #139836 - glyn:test-mpmc-receiver-cloning, r=jhpratt
Basic tests of MPMC receiver cloning

Ref: https://github.com/rust-lang/rust/issues/126840#issuecomment-2802321146
2025-04-15 15:47:32 +10:00
Stuart Cook
c130c4859a
Rollup merge of #139833 - nnethercote:fix-139633, r=oli-obk
Fix some HIR pretty-printing problems

r? `@oli-obk`
2025-04-15 15:47:32 +10:00
Stuart Cook
7e96b64841
Rollup merge of #139822 - 0x79de:fix-eopnotsupp-mapping, r=dtolnay
Fix: Map EOPNOTSUPP to ErrorKind::Unsupported on Unix

This change maps the EOPNOTSUPP errno value (95) to std::io::ErrorKind::Unsupported in the decode_error_kind function for Unix platforms. Previously, it was incorrectly mapped to ErrorKind::Uncategorized.

Fixes #139803
2025-04-15 15:47:31 +10:00
Stuart Cook
fd4e78fbbb
Rollup merge of #139798 - lcnr:where-bounds-gt-alias-bound, r=compiler-errors
normalize: prefer `ParamEnv` over `AliasBound` candidates

cc https://github.com/rust-lang/trait-system-refactor-initiative/issues/175 not the only issue affecting bevy sadly

r? ``@compiler-errors``
2025-04-15 15:47:30 +10:00
Stuart Cook
30bc3c952e
Rollup merge of #139791 - lcnr:ignore-global-where-bounds, r=compiler-errors
drop global where-bounds before merging candidates

fixes https://github.com/rust-lang/trait-system-refactor-initiative/issues/172

r? ```@compiler-errors```
2025-04-15 15:47:30 +10:00
Stuart Cook
e69b77cc6f
Rollup merge of #139789 - lcnr:opaques-auto-trait-leakage, r=compiler-errors
do not unnecessarily leak auto traits in item bounds

fixes https://github.com/rust-lang/trait-system-refactor-initiative/issues/158

Not a fix for https://github.com/rust-lang/trait-system-refactor-initiative/issues/173 as you may have realized/tried yourself, cc #139788. However, fixing this feels desirable regardless and I don't see any reason not to.

r? ```@compiler-errors```
2025-04-15 15:47:29 +10:00
Stuart Cook
f3ac5c7e4f
Rollup merge of #139785 - fneddy:fix_test_cstring_merging_alignment, r=Mark-Simulacrum
Let CStrings be either 1 or 2 byte aligned.

We see a regression on the `tests/assembly/cstring-merging.rs` test on s390x.

Some architectures (like s390x) require strings to be 2 byte aligned. Therefor the section name will be marked with a .2  postfix on this architectures.

Allowing a section name with a .1 or .2 postfix will make the test pass on either platform.
2025-04-15 15:47:29 +10:00
Stuart Cook
8ba45f1737
Rollup merge of #139772 - nnethercote:rm-hir-Map, r=Zalathar
Remove `hir::Map`

A follow-up to https://github.com/rust-lang/rust/pull/139232.

r? `@Zalathar`
2025-04-15 15:47:28 +10:00
Stuart Cook
ff0af9c701
Rollup merge of #139750 - no1wudi:fix, r=tgross35
std/thread: Use default stack size from menuconfig for NuttX

* Update comments to clarify the usage of zero as an indication for default stack size configuration
* Adjust conditional compilation to reflect the changes in stack size handling for the NuttX platform

This change improves clarity and consistency in stack size configuration across platforms.
2025-04-15 15:47:28 +10:00
Stuart Cook
911864542a
Rollup merge of #139671 - m-ou-se:proc-macro-span, r=dtolnay
Proc macro span API redesign: Replace proc_macro::SourceFile by Span::{file, local_file}

Simplification/redesign of the unstable proc macro span API, tracked in https://github.com/rust-lang/rust/issues/54725:

Before:

```rust
impl Span {
    pub fn line(&self) -> usize;
    pub fn column(&self) -> usize;
    pub fn source_file(&self) -> SourceFile;
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct SourceFile { .. }

impl !Send for SourceFile {}
impl !Sync for SourceFile {}

impl SourceFile {
    pub fn path(&self) -> PathBuf;
    pub fn is_real(&self) -> bool;
}
```

After:

```rust
impl Span {
    pub fn line(&self) -> usize;
    pub fn column(&self) -> usize;
    pub fn file(&self) -> String; // Mapped file name, for display purposes.
    pub fn local_file(&self) -> Option<PathBuf>; // Real file name as it exists on disk.
}
```

This resolves the last blocker for stabilizing these methods. (Stabilizing will be a separate PR with FCP.)
2025-04-15 15:47:27 +10:00
Stuart Cook
81668491ae
Rollup merge of #139554 - lolbinarycat:std-output-exit_ok, r=tgross35
std: add Output::exit_ok

approved in ACP https://github.com/rust-lang/libs-team/issues/554

Tracking issue: https://github.com/rust-lang/rust/issues/84908
2025-04-15 15:47:26 +10:00
Stuart Cook
2836170517
Rollup merge of #139517 - Ayush1325:uefi-cmd-stdin-null, r=joboet
std: sys: process: uefi: Use NULL stdin by default

According to the docs in `Command::output`:

> By default, stdout and stderr are captured (and used to provide the
resulting output). Stdin is not inherited from the parent and any attempt by the child process to read from the stdin stream will result in the stream immediately closing.

This was being violated by UEFI which was inheriting stdin by default.

While the docs don't explicitly state that the default should be NULL, the behaviour seems like reading from NULL.

UEFI however, has a bit of a problem. The `EFI_SIMPLE_TEXT_INPUT_PROTOCOL` only provides support for reading 1 key press. This means that you either get an error, or it is assumed that the keypress was read successfully. So there is no way to have a successful read of length 0. Currently, I am returning UNSUPPORTED error when trying to read from NULL stdin. On linux however, you will get a read of length 0 for Null stdin.

One possible way to get around this is to translate one of the UEFI errors to a read 0 (Maybe unsupported?). It is also possible to have a non-standard error code, but well, not sure if we go that route.

Alternatively, if meaning of Stdio::Null is platform dependent, it should be fine to keep the current behaviour of returning an error.

cc ```@nicholasbishop``` ```@dvdhrm```
2025-04-15 15:47:25 +10:00
Stuart Cook
15f5666261
Rollup merge of #138393 - oli-obk:pattern-type-in-pattern, r=BoxyUwU
Allow const patterns of matches to contain pattern types

Trying to pattern match on a type containing a pattern type will currently fail with an ICE

```rust
error: internal compiler error: compiler/rustc_mir_build/src/builder/matches/test.rs:459:18: invalid type for non-scalar compare: (u32) is 1..
  --> src/main.rs:22:5
   |
22 |     TWO => {}
   |     ^^^
```

because the compiler tries to generate a MIR `BinOp(Eq)` operation on a pattern type, which is not supported. While we could support that, there are side effects of allowing this (none that would compile, but the compiler would simultaneously think it could `==` pattern types and that it could not because `PartialEq` is not implemented. So instead I change the logic for pattern matching to transmute pattern types to their base type before comparing.

r? ```@BoxyUwU```

cc #123646 ```@scottmcm``` ```@joshtriplett```
2025-04-15 15:47:25 +10:00
Stuart Cook
49f45981bf
Rollup merge of #138374 - celinval:issue-136925-const-contract, r=compiler-errors,oli-obk,RalfJung
Enable contracts for const functions

Use `const_eval_select!()` macro to enable contract checking only at runtime. The existing contract logic relies on closures, which are not supported in constant functions.

This commit also removes one level of indirection for ensures clauses since we no longer build a closure around the ensures predicate.

Resolves #136925

**Call-out:** This is still a draft PR since CI is broken due to a new warning message for unreachable code when the bottom of the function is indeed unreachable. It's not clear to me why the warning wasn't triggered before.

r? ```@compiler-errors```
2025-04-15 15:47:24 +10:00
roifewu
7fde3fcd2e feat: Add pub(crate) mod option for unlinked files 2025-04-15 13:12:03 +08:00
roifewu
78503f2d1f feat: highlight tail expression in labeled block 2025-04-15 12:58:38 +08:00
Hayashi Mikihiro
28e34c8d33 fix: `Extract into function include inline variable in fmt macro
Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>
2025-04-15 11:19:50 +09:00
Tyler Breisacher
f9716e4782
Remove incorrect doc comment 2025-04-14 19:05:13 -07:00
Lukas Wirth
b8cf608cfe
Merge pull request #19583 from Kobzol/revert-19582-ci-pgo
Do not perform PGO on Linux CI
2025-04-14 15:47:06 +00:00
Jakub Beránek
4c86214f47
Do not enable PGO in combination with zigbuild 2025-04-14 17:35:50 +02:00
Lukas Wirth
7fc29a99ef
Merge pull request #19568 from snprajwal/destructure-struct-editor
refactor: editor for `destructure_struct_binding`
2025-04-14 15:35:00 +00:00
Mara Bos
963d076989 Disable some r-a tests in bootstrap. 2025-04-14 16:53:24 +02:00
Lukas Wirth
aded72f8e6
Merge pull request #19572 from snprajwal/expand-rest-pattern
refactor: migrate `expand_rest_pattern` to editor
2025-04-14 14:50:08 +00:00
Lukas Wirth
6c589ef504
Merge pull request #19582 from Kobzol/ci-pgo
Distribute x64 and aarch64 Linux builds with PGO optimizations
2025-04-14 14:32:56 +00:00
Lukas Wirth
dc70a78b03
Merge pull request #19569 from snprajwal/fixmes
fix(ast): return correct types for `make::expr_*` methods
2025-04-14 11:10:27 +00:00
Lukas Wirth
909d210f4c
Merge pull request #19578 from clouds56-contrib/drive-letter
add normalizeDriveLetter
2025-04-14 11:09:37 +00:00
Lukas Wirth
4d6f9e7aa8
Merge pull request #19521 from snprajwal/ci
ci: cancel parallel jobs if test fails
2025-04-14 11:08:43 +00:00