Commit graph

298901 commits

Author SHA1 Message Date
Matthias Krüger
59191fa513
Rollup merge of #138957 - Natural-selection1:update-Option-doc, r=Amanieu
Update the index of Option to make the summary more comprehensive

fix: #138955

This PR and #138968 are twin PR

By the way, this is my first time contributing to rust, and I'm not a native English speaker, so any suggestions—whether about the wording in the docs or the contribution process itself—would be greatly appreciated!
2025-04-25 07:50:24 +02:00
Matthias Krüger
84a921d957
Rollup merge of #137653 - tgross35:deprecate-concat_idents, r=workingjubilee
Deprecate the unstable `concat_idents!`

`concat_idents` has been around unstably for a long time, but there is now a better (but still unstable) way to join identifiers using `${concat(...)}` syntax with `macro_metavar_expr_concat`. This resolves a lot of the problems with `concat_idents` and is on a better track toward stabilization, so there is no need to keep both versions around. `concat_idents!` still has a lot of use in the ecosystem so deprecate it before removing, as discussed in [1].

Link: https://github.com/rust-lang/rust/issues/124225

[1]: https://rust-lang.zulipchat.com/#narrow/channel/219381-t-libs/topic/Removing.20.60concat_idents.60
2025-04-25 07:50:23 +02:00
bit-aloo
9bc04016e6
add custom enzyme markers to target methods 2025-04-25 11:09:52 +05:30
bit-aloo
f319dd909e
add llvm wrappers and corresponding methods in attribute 2025-04-25 11:09:52 +05:30
John Kåre Alsaker
c8e7c6261e Zero the buffer passed from write_with 2025-04-25 07:14:27 +02:00
The Miri Cronjob Bot
8a9153d19c Merge from rustc 2025-04-25 05:01:33 +00:00
The Miri Cronjob Bot
65e76849ac Merge from rustc 2025-04-25 05:01:33 +00:00
The Miri Cronjob Bot
37049558e4 Preparing for merge from rustc 2025-04-25 04:54:29 +00:00
Lukas Wirth
40a3f84b67
Merge pull request #19684 from darichey/error-parse-discover
Always error when failed to parse DiscoverProjectMessage
2025-04-25 04:48:46 +00:00
Nicholas Nethercote
e37c367482 Improve pretty printing of if/else.
By removing some of the over-indenting. AST pretty printing now looks
correct. HIR pretty printing is better, but still over-indents some.
2025-04-25 14:33:16 +10:00
Nicholas Nethercote
ee43aa356a Fix some pretty printing indents.
Indents for `cbox` and `ibox` are 0 or `INDENT_UNIT` (4) except for a
couple of places which are `INDENT_UNIT - 1` for no clear reason.

This commit changes the three space indents to four spaces.
2025-04-25 14:33:16 +10:00
Nicholas Nethercote
3d488f8e0c Add pretty printing tests for if/else.
The AST pretty printing is a bit wonky. The HIR pretty printing is
extremely wonky.
2025-04-25 14:33:14 +10:00
François Bernier
593775a83b Add PGO support to install
Enable PGO optimizations when installing rust-analyzer with the
--pgo flag. This mirrors functionality already available in dist
command, allowing developers to create optimized local builds.

Example:
cargo xtask install --server --pgo clap-rs/clap

PGO code has been extracted to a dedicated module for reuse.
2025-04-25 00:33:09 -04:00
David Richey
1993def51e Always error when failed to parse DiscoverProjectMessage 2025-04-24 22:59:39 -05:00
Hegui Dai
cdc7298392 Solved suggestions 2025-04-25 11:06:53 +08:00
Michael Goulet
1d0b3be659 Don't use item name to look up associated item from trait item 2025-04-25 01:57:45 +00:00
Alex Macleod
7b337f6e25 Replace some Symbol::as_str usage 2025-04-25 01:03:03 +00:00
Henry Jiang
a71cba709b strip underlying xcoff object 2025-04-24 19:55:03 -04:00
bors
847e3ee6b0 Auto merge of #139752 - usamoi:macos-used, r=saethlin,madsmtm
set subsections_via_symbols for ld64 helper sections

closes https://github.com/rust-lang/rust/issues/139744
cc `@madsmtm`
2025-04-24 22:59:00 +00:00
Matthias Krüger
bc25dc2376
Rollup merge of #140248 - GuillaumeGomez:fix-impl-block-items-indent, r=notriddle
Fix impl block items indent

Fixes #139771.

Now, all impl block "before impl block items" indent are the same (ie, item info and documentation).

With this fix, it looks like this:

![Screenshot From 2025-04-24 12-32-40](https://github.com/user-attachments/assets/907803a2-2949-4d01-afa5-fc3132d10ff2)

You can test it [here](https://rustdoc.crud.net/imperio/fix-impl-block-items-indent/foo/struct.Context.html).

r? `@notriddle`
2025-04-25 00:54:01 +02:00
Matthias Krüger
c43022f8cb
Rollup merge of #140229 - nnethercote:pre-DelimArgs-spacing, r=petrochenkov
`DelimArgs` tweaks

r? `@petrochenkov`
2025-04-25 00:54:01 +02:00
Matthias Krüger
ee7766a25f
Rollup merge of #140213 - onur-ozkan:x-setup, r=cuviper
mention about `x.py setup` in `INSTALL.md`

Addresses [#t-infra/bootstrap > Installing from Source](https://rust-lang.zulipchat.com/#narrow/channel/326414-t-infra.2Fbootstrap/topic/Installing.20from.20Source).
2025-04-25 00:54:00 +02:00
Matthias Krüger
11fbbc54ba
Rollup merge of #140210 - Berrysoft:cygwin-timedwait, r=joboet
Work around cygwin issue on condvar timeout

This workaround *just works*... Actually I don't quite understand why does it work in such way. With a simple test on Cygwin, it seems that the maximum value of `tv_sec` could be 12899331056917, while the maximum value of `tv_nsec` should be a value floating around 464600000. A larger `timespec` could block the syscall forever.

r? `@joboet`
2025-04-25 00:54:00 +02:00
Matthias Krüger
02ebca2784
Rollup merge of #140196 - Kivooeo:new-fix-two, r=wesleywiser
Improved diagnostics for non-primitive cast on non-primitive types (`Arc`, `Option`)

here is a small fix that improving error messaging when user is trying to do something like this
```rust
let _ = "x" as Arc<str>;
let _ = 2 as Option<i32>;
```

before it looks like this
```rust
error[E0605]: non-primitive cast: `&'static str` as `Arc<str>`
 --> src\main.rs:3:13
  |
3 |     let _ = "x" as Arc<str>;
  |             ^^^^^^^^^^^^^^^ help: consider using the `From` trait instead: `Arc<str>::from("x")`

error[E0605]: non-primitive cast: `i32` as `Option<i32>`
 --> src\main.rs:4:13
  |
4 |     let _ = 2 as Option<i32>;
```
which looks horrible to be honest
so i made a small fix that make errors looks like this
```rust
error[E0605]: non-primitive cast: `&'static str` as `Arc<str>`
  |
3 |     let _ = "x" as Arc<str>;
  |             ^^^^^^^^^^^^^^^
  |
  = note: an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
help: consider using the `From` trait instead
  |
3 -     let _ = "x" as Arc<str>;
3 +     let _ = Arc::<str>::from("x");
  |

error[E0605]: non-primitive cast: `i32` as `Option<i32>`
  |
4 |     let _ = 2 as Option<i32>;
  |             ^^^^^^^^^^^^^^^^
  |
  = note: an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
help: consider using the `From` trait instead
  |
4 -     let _ = 2 as Option<i32>;
4 +     let _ = Option::<i32>::from(2);
```

**What improves?**
1) `Arc<str>::from("x")` which makes no sense because of missing `::`
2) readability

**Related Issue**
fixes #135412
2025-04-25 00:53:59 +02:00
Matthias Krüger
4c0d38b93e
Rollup merge of #140187 - amy-kwan:amy-kwan/update_runmake_tests_AIX, r=jieyouxu
[AIX] Handle AIX dynamic library extensions within c-link-to-rust-dylib run-make test

Dynamic libraries on AIX have the ".a" extension. The c-link-to-rust-dylib run-make test checks for the extension explicitly, so the extension for AIX is also added to accommodate the test case on AIX.
2025-04-25 00:53:59 +02:00
Matthias Krüger
7ba71d38d8
Rollup merge of #140148 - marcoieni:ci-aws-codebuild, r=Kobzol
CI: use aws codebuild for job dist-arm-linux

try-job: dist-arm-linux
2025-04-25 00:53:58 +02:00
Matthias Krüger
610ed826e3
Rollup merge of #137096 - ehuss:stabilize-doctest-xcompile, r=fmease
Stabilize flags for doctest cross compilation

This makes the following changes in preparation for supporting doctest cross-compiling in cargo:

- Renames `--runtool` and `--runtool-arg` to `--test-runtool` and `--test-runtool-arg` to maintain consistency with other `--test-*` arguments.
- Stabilizes the `--test-runtool` and `--test-runtool-arg`. These are needed in order to support cargo's `target.runner` option which specifies a runner to execute a cross-compiled doctest (for example, qemu).
- Stabilizes the `--enable-per-target-ignores` flag by removing it and making it unconditionally enabled. This makes it possible to disable a doctest on a per-target basis, which I think will be helpful for rolling out this feature.

These changes were suggested in https://rust-lang.zulipchat.com/#narrow/channel/266220-t-rustdoc/topic/stabilizing.20doctest.20xcompile/near/409281127

The intent is to stabilize the doctest-xcompile feature in cargo. This will help ensure that for projects that do cross-compile testing that their doctests are also covered. Currently there is a somewhat surprising behavior that they are ignored.

Closes https://github.com/rust-lang/rust/issues/64245

try-job: x86_64-msvc-1
2025-04-25 00:53:58 +02:00
Trevor Gross
75a9be609e Deprecate the unstable concat_idents!
`concat_idents` has been around unstably for a long time, but there is
now a better (but still unstable) way to join identifiers using
`${concat(...)}` syntax with `macro_metavar_expr_concat`. This resolves
a lot of the problems with `concat_idents` and is on a better track
toward stabilization, so there is no need to keep both versions around.
`concat_idents!` still has a lot of use in the ecosystem so deprecate it
before removing, as discussed in [1].

Link: https://github.com/rust-lang/rust/issues/124225
[1]: https://rust-lang.zulipchat.com/#narrow/channel/219381-t-libs/topic/Removing.20.60concat_idents.60
2025-04-24 22:14:23 +00:00
Timo
91ed6060bb
Consistently refer to the ? operator (#14687)
Matches the `rustc` terminology

changelog: none
2025-04-24 22:04:05 +00:00
dianne
4313318443 update unstable book to mention moving out of boxes 2025-04-24 15:02:44 -07:00
dianne
0eb3b110f0 lower deref patterns on boxes using built-in derefs
This allows deref patterns to move out of boxes.

Implementation-wise, I've opted to put the information of whether a
deref pattern uses a built-in deref or a method call in the THIR. It'd
be a bit less code to check `.is_box()` everywhere, but I think this way
feels more robust (and we don't have a `mutability` field in the THIR
that we ignore when the smart pointer's a box). I'm not sure about the
naming (or using `ByRef`), though.
2025-04-24 14:25:27 -07:00
dianne
64c8d5d7f5 move existing tests away from using boxes
Since deref patterns on boxes will be lowered differently, I'll be
making a separate test file for them. This makes sure we're still
testing the generic `Deref(Mut)::deref(_mut)`-based lowering.
2025-04-24 14:25:27 -07:00
Kivooeo
fc12b5b6d8 fix-issue-14665 2025-04-25 01:39:35 +05:00
bors
d7ea436a02 Auto merge of #140256 - matthiaskrgr:rollup-8if58zf, r=matthiaskrgr
Rollup of 8 pull requests

Successful merges:

 - #136083 (Suggest {to,from}_ne_bytes for transmutations between arrays and integers, etc)
 - #138282 (Add `#[repr(u128)]`/`#[repr(i128)]` enums to `improper_ctypes_definitions`)
 - #139700 (Autodiff flags)
 - #140139 (rustc_target: Adjust RISC-V feature implication)
 - #140141 (Move zkVM constants into `sys::env_consts`)
 - #140150 (fix MAX_EXP and MIN_EXP docs)
 - #140172 (Make algebraic functions into `const fn` items.)
 - #140191 (Remove git repository from git config)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-24 19:48:38 +00:00
lcnr
e5e3a95c1e norm nested aliases before evaluating the parent goal 2025-04-24 18:41:43 +00:00
usamoi
b1a38313cb set subsections_via_symbols for ld64 helper sections 2025-04-25 01:41:25 +08:00
Amanda Stjerna
d8528c6a31 Some drive-by housecleaning in rustc_borrowck
This commit picks up a few odd ends discovered during the work on #130227.
It adds some documentation and renames a few methods with too generic names
to describe what they actually do. It also adds some debug output that was
helpful during bug hunting.
2025-04-24 17:27:49 +02:00
Matthias Krüger
a01655298a
Rollup merge of #140191 - Kobzol:remove-git-repository-from-git-config, r=jieyouxu
Remove git repository from git config

It is no longer needed after https://github.com/rust-lang/rust/pull/138591. We could even remove the `nightly_branch` field, but it still has one usage.

r? ``@jieyouxu``
2025-04-24 17:19:47 +02:00
Matthias Krüger
cea6ba7a06
Rollup merge of #140172 - bjoernager:const-float-algebraic, r=RalfJung
Make algebraic functions into `const fn` items.

Tracking issue: #136469

This PR makes the algebraic intrinsics and the unstable, algebraic functions of `f16`, `f32`, `f64`, and `f128` into `const fn` items:

```rust
impl f16 {
    pub const fn algebraic_add(self, rhs: f16) -> f16;
    pub const fn algebraic_sub(self, rhs: f16) -> f16;
    pub const fn algebraic_mul(self, rhs: f16) -> f16;
    pub const fn algebraic_div(self, rhs: f16) -> f16;
    pub const fn algebraic_rem(self, rhs: f16) -> f16;
}

impl f32 {
    pub const fn algebraic_add(self, rhs: f32) -> f32;
    pub const fn algebraic_sub(self, rhs: f32) -> f32;
    pub const fn algebraic_mul(self, rhs: f32) -> f32;
    pub const fn algebraic_div(self, rhs: f32) -> f32;
    pub const fn algebraic_rem(self, rhs: f32) -> f32;
}

impl f64 {
    pub const fn algebraic_add(self, rhs: f64) -> f64;
    pub const fn algebraic_sub(self, rhs: f64) -> f64;
    pub const fn algebraic_mul(self, rhs: f64) -> f64;
    pub const fn algebraic_div(self, rhs: f64) -> f64;
    pub const fn algebraic_rem(self, rhs: f64) -> f64;
}

impl f128 {
    pub const fn algebraic_add(self, rhs: f128) -> f128;
    pub const fn algebraic_sub(self, rhs: f128) -> f128;
    pub const fn algebraic_mul(self, rhs: f128) -> f128;
    pub const fn algebraic_div(self, rhs: f128) -> f128;
    pub const fn algebraic_rem(self, rhs: f128) -> f128;
}

// core::intrinsics

pub const fn fadd_algebraic<T: Copy>(a: T, b: T) -> T;
pub const fn fsub_algebraic<T: Copy>(a: T, b: T) -> T;
pub const fn fmul_algebraic<T: Copy>(a: T, b: T) -> T;
pub const fn fdiv_algebraic<T: Copy>(a: T, b: T) -> T;
pub const fn frem_algebraic<T: Copy>(a: T, b: T) -> T;
```

This PR does not preserve the initial behaviour of these functions yielding non-deterministic output under Miri; it is most likely desired to reimplement this behaviour at some point.
2025-04-24 17:19:46 +02:00
Matthias Krüger
06126df8b8
Rollup merge of #140150 - RalfJung:MAX_EXP, r=tgross35
fix MAX_EXP and MIN_EXP docs

As pointed out in https://github.com/rust-lang/rust/issues/88734, the docs for these constants are wrong.

r? ``@tgross35``
2025-04-24 17:19:46 +02:00
Matthias Krüger
9dcb367838
Rollup merge of #140141 - thaliaarchi:env-consts/zkvm, r=joboet
Move zkVM constants into `sys::env_consts`

I missed this in #139868. Its `mod` declaration was removed, but the contents were not moved.

r? joboet
2025-04-24 17:19:45 +02:00
Matthias Krüger
31a72bc45c
Rollup merge of #140139 - a4lg:riscv-feature-imply-adjust-1, r=Amanieu
rustc_target: Adjust RISC-V feature implication

This commit adjusts feature implication of the RISC-V ISA for better feature detection from the user perspective.

The main rule is:

*   If the feature `A` is a functional superset of the feature `B` (`A ⊃ B`),
    `A` is to imply `B`, even if this implication is not on the manual.

Such implications (not directly written in the ISA manual) are commented as `A ⊃ B`
which means "`A` is a (functional) superset of `B`".

1.  `Zbc` → `Zbkc` (add as a superset)
    The `Zbkc` extension is a subset of the `Zbc` extension (`Zbc` minus `clmulr` instruction).
2.  `Zkr` → (nothing) (remove dependency to `Zicsr`)
    Implication to the `Zicsr` extension is removed because (although nearly harmless), the `Zkr` extension (or the `seed` CSR section) defines its own subset of the `Zicsr` extension (guaranteed to work against the `seed` CSR which needs read/write access).
3.  `Zvbb` → `Zvkb` (comment as a superset)
    This implication was already there but not denoted as a functional superset.  This commit adds the comment.
4.  `Zvfh` → `Zvfhmin` (comment as a superset)
    This is similar to the case above (`Zvbb` → `Zvkb`).
5.  `Zvfh` → `Zve32f` (add implication per the ISA specification)
    This dependency is on the ISA manual but was missing (due to the fact that `Zvfh` indirectly implies `Zve32f` on the current implementation through `Zvfh` → `Zvfhmin` which is a functional relation). This commit ensures that this is *also* ISA-compliant in the source code level (there's no functional changes though).
6.  `Zvknhb` → `Zvknha` (add as a superset)
    The `Zvknhb` extension (SHA-256 / SHA-512) is a functional superset of the `Zvknha` extension (SHA-256 only).
2025-04-24 17:19:44 +02:00
Matthias Krüger
c3f811f02f
Rollup merge of #139700 - EnzymeAD:autodiff-flags, r=oli-obk
Autodiff flags

Interestingly, it seems that some other projects have conflicts with exactly the same LLVM optimization passes as autodiff.
At least `LLVMRustOptimize` has exactly the flags that we need to disable problematic opt passes.

This PR enables us to compile code where users differentiate two identical functions in the same module. This has been especially common in test cases, but it's not impossible to encounter in the wild.

It also enables two new flags for testing/debugging. I consider writing an MCP to upgrade PrintPasses to be a standalone -Z flag, since it is *not* the same as `-Z print-llvm-passes`, which IMHO gives less useful output. A discussion can be found here: [#t-compiler/llvm > Print llvm passes. @ 💬](https://rust-lang.zulipchat.com/#narrow/channel/187780-t-compiler.2Fllvm/topic/Print.20llvm.20passes.2E/near/511533038)

Finally, it improves `PrintModBefore` and `PrintModAfter`. They used to work reliable, but now we just schedule enzyme as part of an existing ModulePassManager (MPM). Since Enzyme is last in the MPM scheduling, PrintModBefore became very inaccurate. It used to print the input module, which we gave to the Enzyme and was great to create llvm-ir reproducer. However, lately the MPM would run the whole `default<O3>` pipeline, which heavily modifies the llvm module, before we pass it to Enzyme. That made it impossible to use the flag to create llvm-ir reproducers for Enzyme bugs. We now schedule a PrintModule pass just before Enzyme, solving this problem.

Based on the PrintPass output, it also _seems_ like changing `registerEnzymeAndPassPipeline(PB, true);` to `registerEnzymeAndPassPipeline(PB, false);` has no effect. In theory, the bool should tell Enzyme to schedule some helpful passes in the PassBuilder. However, since it doesn't do anything and I'm not 100% sure anymore on whether we really need it, I'll just disable it for now and postpone investigations.

r? ``@oli-obk``

closes #139471

Tracking:

- https://github.com/rust-lang/rust/issues/124509
2025-04-24 17:19:44 +02:00
Matthias Krüger
27eac4b6d3
Rollup merge of #138282 - beetrees:repr128-not-ffi-safe, r=oli-obk
Add `#[repr(u128)]`/`#[repr(i128)]` enums to `improper_ctypes_definitions`

This makes them warn whenever a plain `u128`/`i128` would. If the lang team decides to merge #137306 then this can be reverted.

Tracking issue: #56071
2025-04-24 17:19:43 +02:00
Matthias Krüger
53afa97eb7
Rollup merge of #136083 - bend-n:⃤⃤, r=lcnr
Suggest {to,from}_ne_bytes for transmutations between arrays and integers, etc

implements #136067

Rust has helper methods for many kinds of safe transmutes, for example integer<->bytes. This is a lint against using transmute for these cases.

```rs
fn bytes_at_home(x: [u8; 4]) -> u32 {
   transmute(x)
}

// other examples
transmute::<[u8; 2], u16>();
transmute::<[u8; 8], f64>();
transmute::<u32, [u8; 4]>();
transmute::<char, u32>();
transmute::<u32, char>();
```
It would be handy to suggest `u32::from_ne_bytes(x)`.
This is implemented for `[u8; _]` -> `{float int}`

This also implements the cases:
`fXX` <-> `uXX` = `{from_bits, to_bits}`
`uXX` -> `iXX` via `cast_unsigned` and `cast_signed`
{`char` -> `u32`, `bool` -> `n8`} via `from`
`u32` -> `char` via `from_u32_unchecked` (note: notes `from_u32().unwrap()`) (contested)
`u8` -> `bool` via `==` (debatable)

---
try-job: aarch64-gnu
try-job: test-various
2025-04-24 17:19:42 +02:00
bjorn3
f55c2c0d89
Merge pull request #1575 from rust-lang/exception-handling-preparation
Preparations for exception handling support
2025-04-24 17:02:03 +02:00
Sergio Gasquez
2afb117f8f feat: Add XtensaAsmPrinter 2025-04-24 16:26:26 +02:00
Alex Macleod
736be8bbb1 Consistently refer to the ? operator 2025-04-24 13:40:57 +00:00
lcnr
8cd12bf8fa check types of const param default 2025-04-24 13:28:59 +00:00
bjorn3
b59f697ee9 Relocation improvements for .eh_frame
This is necessary to handle LSDA references in the future once unwinding
is supported.
2025-04-24 13:16:21 +00:00