Commit Graph

4006 Commits

Author SHA1 Message Date
Stuart Cook 109b98a4d8
Rollup merge of #139654 - nnethercote:AssocKind-descr, r=compiler-errors
Improve `AssocItem::descr`.

The commit adds "associated" to the description of associated types and associated consts, to match the description of associated functions. This increases error message precision and consistency with `AssocKind::fmt`.

The commit also notes an imperfection in `AssocKind::fmt`; fixing this imperfection is possible but beyond the scope of this PR.

r? `@estebank`
2025-04-11 13:31:50 +10:00
Stuart Cook 7a9ecba3bc
Rollup merge of #139641 - BoxyUwU:allow_parend_array_len_infer, r=compiler-errors
Allow parenthesis around inferred array lengths

In #135272 it was noticed that we weren't handling `Vec<(((((_)))))>` correctly under the new desugaring for `generic_arg_infer`, this had to be fixed in order to not regress stable code for types that should continue working. This has the side effect of *also* allowing the following to work:
```rust
#![feature(generic_arg_infer)]
struct Bar<const N: usize>;
fn main() {
    let a: Bar<((_))> = Bar::<10>;
}
```

However I did not make the same change for array lengths resulting in the following not compiling:
```rust
#![feature(generic_arg_infer)]
fn main() {
    let a: [u8; (((_)))] = [2; 2];
    let a: [u8; 2] = [2; (((((_)))))];
}
```

This is rather inconsistent as parenthesis around `_` *are* supported for const args to non-arrays, and type args. This PR fixes this allowing the above example to compile. No stable impact.

r? compiler-errors
2025-04-11 13:31:49 +10:00
Stuart Cook ad31b963fb
Rollup merge of #139600 - tgross35:update-builtins, r=tgross35
Update `compiler-builtins` to 0.1.153

Includes the following changes:

* Avoid OOB access in `memcpy` and `memmove` [1]
* Enable intrinsics on AVR [2]
* `libm` updates to avoid using `core::arch` vector intrinsics [3]
* Re-enable `f16` on aarch64 without Neon [4]

[1]: https://github.com/rust-lang/compiler-builtins/pull/799
[2]: https://github.com/rust-lang/compiler-builtins/pull/791
[3]: https://github.com/rust-lang/compiler-builtins/pull/814
[4]: https://github.com/rust-lang/compiler-builtins/pull/809
2025-04-11 13:31:49 +10:00
Stuart Cook 6de146f82f
Rollup merge of #139574 - onur-ozkan:better-channel-handling, r=onur-ozkan
bootstrap: improve `channel` handling

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

See [this comment](https://github.com/rust-lang/rust/pull/139574#discussion_r2034611993) for the explanation of this bug.
2025-04-11 13:31:48 +10:00
Stuart Cook 96e5184218
Rollup merge of #139564 - compiler-errors:deeply-norm, r=lcnr
Deeply normalize obligations in `BestObligation` folder

Built on #139513.

This establishes a somewhat rough invariant that the `Obligation`'s predicate is always deeply normalized in the folder; when we construct a new obligation we normalize it.

Putting this up for discussion since it does affect some goals.

r? lcnr
2025-04-11 13:31:48 +10:00
Stuart Cook a6bbbd88d9
Rollup merge of #139469 - jieyouxu:compiletest-supports-crate-type, r=onur-ozkan
Introduce a `//@ needs-crate-type` compiletest directive

The `//@ needs-crate-type: $crate_types...` directive takes a comma-separated list of crate types that the target platform must support in order for the test to be run. This allows the test writer to semantically convey that the ignore condition is based on target crate type needs, instead of using a general purpose `//@ ignore-$target` directive (often without comment).

Fixes #132309.

### Example

```rs
//@ needs-crate-type: dylib (ignored on e.g. wasm32-unknown-unknown)
//@ compile-flags: --crate-type=dylib

fn foo() {}
```

### Review advice

- Best reviewed commit-by-commit.
- The impl is not very clean, I briefly attempted to clean up the directive handling but found that more invasive changes are needed, so I'd like to not block on the cleanup for now.

try-job: test-various
try-job: armhf-gnu
2025-04-11 13:31:47 +10:00
Stuart Cook f69bf05206
Rollup merge of #139447 - izarma:issue-108131-fix, r=scottmcm
doc changes: debug assertions -> overflow checks

This PR is for the following issue:
https://github.com/rust-lang/rust/issues/108131

has some changes in docs
2025-04-11 13:31:46 +10:00
Stuart Cook cee93ceef0
Rollup merge of #138998 - rperier:donot_suggest_to_use_impl_trait_in_closure_params, r=Noratrieb
Don't suggest the use of  `impl Trait` in closure parameter

Fixes #138932
2025-04-11 13:31:46 +10:00
Stuart Cook 82035893e2
Rollup merge of #138904 - madsmtm:apple-test-no-std, r=tgross35
Test linking and running `no_std` binaries

I looked around, but it seems that we do not have a test that tests a `#![no_std]` + `#![no_main]` binary. So now I've added one. Motivated by discussion in [this Zulip thread](https://rust-lang.zulipchat.com/#narrow/channel/219381-t-libs/topic/Provide.20.60__isPlatformVersionAtLeast.60.20in.20.60std.60.3F/with/507870028).

r? ```@tgross35```

try-job: arm-android
try-job: armhf-gnu
try-job: dist-ohos
try-job: x86_64-mingw-1
2025-04-11 13:31:45 +10:00
Stuart Cook 6eb87abdf4
Rollup merge of #138682 - Alexendoo:extra-symbols, r=fee1-dead
Allow drivers to supply a list of extra symbols to intern

Allows adding new symbols as `const`s in external drivers, desirable in Clippy so we can use them in patterns to replace code like 75530e9f72/src/tools/clippy/clippy_lints/src/casts/cast_ptr_alignment.rs (L66)

The Clippy change adds a couple symbols as a demo, the exact `clippy_utils` API and replacing other usages can be done on the Clippy side to minimise sync conflicts

---

try-job: aarch64-gnu
2025-04-11 13:31:44 +10:00
Stuart Cook cc1799b354
Rollup merge of #137447 - folkertdev:simd-extract-insert-dyn, r=scottmcm
add `core::intrinsics::simd::{simd_extract_dyn, simd_insert_dyn}`

fixes https://github.com/rust-lang/rust/issues/137372

adds `core::intrinsics::simd::{simd_extract_dyn, simd_insert_dyn}`, which contrary to their non-dyn counterparts allow a non-const index. Many platforms (but notably not x86_64 or aarch64) have dedicated instructions for this operation, which stdarch can emit with this change.

Future work is to also make the `Index` operation on the `Simd` type emit this operation, but the intrinsic can't be used directly. We'll need some MIR shenanigans for that.

r? `@ghost`
2025-04-11 13:31:43 +10:00
bors a9f8f1e82b Auto merge of #139410 - Zoxc:fix-dep-graph-no-prev-map, r=oli-obk
Reuse the index from promoted nodes when coloring executed tasks

https://github.com/rust-lang/rust/pull/138824 did not correctly handle the case where a dep node was promoted green, but later or concurrently executed. It resulted in multiple dep nodes being allocated to it. This fixes that by checking that the node was not previously green in the encoder lock.

This also fixes a race when forcing diagnostic nodes introduced in https://github.com/rust-lang/rust/pull/138824.

https://github.com/rust-lang/rust/pull/138824 should get reverted on beta.

This should fix #139110.

r? `@oli-obk`
2025-04-10 23:28:37 +00:00
Vadim Petrochenkov 0423c7b2df dev-guide: Document `dont-require-annotations`
and its use cases in more detail
2025-04-10 23:48:57 +03:00
bors 929fb09aa6 Auto merge of #137412 - scottmcm:redo-swap, r=cuviper
Ensure `swap_nonoverlapping` is really always untyped

This replaces #134954, which was arguably overcomplicated.

## Fixes #134713

Actually using the type passed to `ptr::swap_nonoverlapping` for anything other than its size + align turns out to not work, so this goes back to always erasing the types down to just bytes.

(Except in `const`, which keeps doing the same thing as before to preserve `@RalfJung's` fix from #134689)

## Fixes #134946

I'd previously moved the swapping to use auto-vectorization *on bytes*, but someone pointed out on Discord that the tail loop handling from that left a whole bunch of byte-by-byte swapping around.  This goes back to manual tail handling to avoid that, then still triggers auto-vectorization on pointer-width values.  (So you'll see `<4 x i64>` on `x86-64-v3` for example.)
2025-04-10 20:19:11 +00:00
Ralf Jung e07754892d
Merge pull request #4261 from CraftSpider/windows-rtl-to-dos
Implement RtlNtStatusToDosError and shim test for it
2025-04-10 18:58:38 +00:00
Ralf Jung 78ec0b185d
Merge pull request #4264 from RalfJung/rustup
Rustup
2025-04-10 12:50:10 +00:00
Ralf Jung cd80977c60 Merge from rustc 2025-04-10 14:24:19 +02:00
Pietro Albini d7631d20aa
mention --edition restrictions in rustc-dev-guide 2025-04-10 12:34:57 +02:00
bors 5e11c73c75 Auto merge of #139088 - spastorino:ergonomic-ref-counting-2, r=nikomatsakis
Ergonomic ref counting: optimize away clones when possible

This PR build on top of https://github.com/rust-lang/rust/pull/134797. It optimizes codegen of ergonomic ref-counting when the type being `use`d is only known to be copy after monomorphization. We avoid codening a clone and generate bitwise copy instead.

RFC: https://github.com/rust-lang/rfcs/pull/3680
Tracking issue: https://github.com/rust-lang/rust/issues/132290
Project goal: https://github.com/rust-lang/rust-project-goals/issues/107

r? `@nikomatsakis`

This PR could better sit on top of https://github.com/rust-lang/rust/pull/131650 but as it did not land yet I've decided to just do minimal changes. It may be the case that doing what I'm doing regress the performance and we may need to go the full route of https://github.com/rust-lang/rust/pull/131650.
cc `@saethlin` in this regard.
2025-04-10 09:08:23 +00:00
Ralf Jung b813dcf1fd
Merge pull request #4209 from LorrensP-2158466/freebsd_futex
Implement FreeBSD syscall _umtx_op  for futex support
2025-04-10 09:04:44 +00:00
Jieyou Xu 5fb6b8e48f
rustc-dev-guide: document `needs-crate-type` 2025-04-10 12:52:08 +08:00
bors eb617fad3d Auto merge of #139000 - compiler-errors:rigid-missing-item, r=lcnr
Rigidly project missing item due to guaranteed impossible sized predicate

This is a somewhat involved change, but it amounts to treating missing impl items due to guaranteed impossible where clauses (dyn/str/slice sized, cc #135480) as *rigid projections* rather than projecting to an error term, since that was preventing either reporting a proper error (in an empty param env) *or* successfully type checking the code (in the presence of trivially false where clauses).

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

r? `@lcnr` `@oli-obk`
2025-04-10 04:03:59 +00:00
bors ac450254e6 Auto merge of #139279 - BoxyUwU:bump-boostrap, r=jieyouxu
Bump boostrap compiler to new beta

try-job: `*msvc*`
2025-04-10 00:43:25 +00:00
bors ece5fe4a90 Auto merge of #139595 - matthiaskrgr:rollup-kaa8aim, r=matthiaskrgr
Rollup of 10 pull requests

Successful merges:

 - #138470 (Test interaction between RFC 2229 migration and use closures)
 - #138628 (Add more ergonomic clone tests)
 - #139164 (std: improve documentation for get_mut() methods regarding forgotten guards)
 - #139488 (Add missing regression GUI test)
 - #139489 (compiletest: Add directive `dont-require-annotations`)
 - #139513 (Report higher-ranked trait error when higher-ranked projection goal fails in new solver)
 - #139521 (triagebot: roll compiler reviewers for rustc/unstable book)
 - #139532 (Update `u8`-to-and-from-`i8` suggestions.)
 - #139551 (report call site of inlined scopes for large assignment lints)
 - #139575 (Remove redundant words)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-09 21:35:22 +00:00
Matthias Krüger bc33f3a549
Rollup merge of #139575 - timesince:master, r=wesleywiser
Remove redundant words

Remove redundant words
2025-04-09 20:23:13 +02:00
Matthias Krüger 32508baa49
Rollup merge of #139551 - jogru0:121672, r=oli-obk
report call site of inlined scopes for large assignment lints

Addressed issue: #121672
Tracking issue: #83518

r? `@oli-obk`

I tried to follow your comment about what to do [here](https://github.com/rust-lang/rust/issues/121672#issuecomment-1972783675). However, I'm totally unfamiliar with the code so far (this is my first contribution touching compiler code), so I apologize in advance if I did something stupid 😅

In particular, I'm not sure I use the _correct_ source scope to look for inline data, as there is a whole `IndexVec` of them. My changes definitely did something, as can be seen by the added ui test. However, the result is not as anticipated in the issue:
```
LL |     let cell = std::cell::UnsafeCell::new(data);
   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ value moved from here
```
instead of
```
LL |     let cell = std::cell::UnsafeCell::new(data);
   |                                           ^^^^ value moved from here
```
raising my suspicion that maybe I got the wrong source scope.
2025-04-09 20:23:12 +02:00
Matthias Krüger 3b882a3377
Rollup merge of #139532 - bjoernager:master, r=tgross35
Update `u8`-to-and-from-`i8` suggestions.

`u8::cast_signed` and `i8::cast_unsigned` have been stabilised, but `i8::from_ne_bytes` et al. still suggest using `as i8` or `as u8`.
2025-04-09 20:23:12 +02:00
Matthias Krüger 5b53ce5a90
Rollup merge of #139521 - jieyouxu:compiler-doc-reviewers, r=GuillaumeGomez,ehuss
triagebot: roll compiler reviewers for rustc/unstable book

r? compiler
2025-04-09 20:23:11 +02:00
Matthias Krüger 370fa41def
Rollup merge of #139489 - petrochenkov:noreqann, r=jieyouxu
compiletest: Add directive `dont-require-annotations`

for making matching on specific diagnostic kinds non-exhaustive.

E.g. `//@ dont-require-annotations:ERROR`, like in the examples in this PR.

cc https://github.com/rust-lang/rust/pull/139427#issuecomment-2782827583

Closes #132647 FYI `@BoxyUwU` since you've wanted this.

r? `@jieyouxu`
2025-04-09 20:23:10 +02:00
Matthias Krüger 0729b0d6f0
Rollup merge of #139488 - GuillaumeGomez:add-missing-gui-test, r=camelid
Add missing regression GUI test

Add missing GUI test for #139282 (and also fixes the invalid CSS).

cc `@lolbinarycat`
r? `@notriddle`
2025-04-09 20:23:10 +02:00
Matthias Krüger 42776aa8b8
Rollup merge of #139164 - xizheyin:issue-139034, r=joboet
std: improve documentation for get_mut() methods regarding forgotten guards

Fixes #139034

This PR improves the documentation for `get_mut()` methods in `Mutex`, `RefCell`, and `RwLock` to clarify their behavior when lock guards are forgotten (e.g., via std::mem::forget).

The current documentation for these methods states that a mutable borrow "statically guarantees no locks exist", which is not entirely accurate. While a mutable borrow prevents new locks from being created, it does not clear or detect previously abandoned locks through `forget()`. This can lead to counterintuitive behavior:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=e68cefec12dcd435daf2237c16824ed3
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2024&gist=81263ad652c752afd63c903113d3082c
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=311baa4edb3abf82a25c8d7bf21a4a52

r? libs
2025-04-09 20:23:09 +02:00
Matthias Krüger 89ae2e60e3
Rollup merge of #138628 - spastorino:add-more-ergonomic-clone-tests, r=nikomatsakis
Add more ergonomic clone tests

I've added some extra tests.

r? `@nikomatsakis`
2025-04-09 20:23:09 +02:00
Matthias Krüger df1012c55c
Rollup merge of #138470 - spastorino:test-rfc2229-and-ergonomic-clones, r=nikomatsakis
Test interaction between RFC 2229 migration and use closures

r? `@nikomatsakis`

Fixes #138101
2025-04-09 20:23:08 +02:00
timesince f34fa18b01
Remove redundant words 2025-04-09 18:46:50 +08:00
bors 771483bdbe Auto merge of #139327 - cjgillot:gvn-place, r=oli-obk
Allow GVN to produce places and not just locals.

That may be too big of a hammer, as we may introduce new deref projections (possible UB footgun + probably not good for perf).

The second commit opts out of introducing projections that don't have a stable offset, which is probably what we want. Hence no new Deref and no new Index projections.

Fixes https://github.com/rust-lang/rust/issues/138936
cc `@scottmcm` `@dianqk`
2025-04-09 08:50:33 +00:00
Ralf Jung 006da4145b
Merge pull request #4067 from CraftSpider/windows-metadata
Support getting file metadata on Windows
2025-04-09 06:17:18 +00:00
bors cd593d4692 Auto merge of #139552 - matthiaskrgr:rollup-b194mk8, r=matthiaskrgr
Rollup of 10 pull requests

Successful merges:

 - #139494 (Restrict some queries by def-kind more)
 - #139496 (Revert r-a changes of rust-lang/rust#139455)
 - #139506 (add missing word in doc comment (part 2))
 - #139515 (Improve presentation of closure signature mismatch from `Fn` trait goal)
 - #139520 (compiletest maintenance: sort deps and drop dep on `anyhow`)
 - #139523 (Rustc dev guide subtree update)
 - #139526 (Fix deprecation note for std::intrinsics)
 - #139528 (compiletest: Remove the `--logfile` flag)
 - #139541 (Instantiate higher-ranked transmute goal w/ placeholders before emitting sub-obligations)
 - #139547 (Update library tracking issue template to set S-tracking-unimplemented)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-09 05:39:18 +00:00
Matthias Krüger b2148a818f
Rollup merge of #139547 - joshtriplett:library-tracking-issue-template, r=Amanieu
Update library tracking issue template to set S-tracking-unimplemented

This will help people notice the `S-tracking-*` labels, and if the
tracking issue *is* implemented, they can change the label.

Discussed in a `@rust-lang/libs-api` meeting.

r? `@Amanieu`
2025-04-08 21:26:03 +02:00
Matthias Krüger 8fcd5484bc
Rollup merge of #139541 - compiler-errors:transmute, r=lcnr
Instantiate higher-ranked transmute goal w/ placeholders before emitting sub-obligations

This avoids an ICE where we weren't keeping track of bound variables correctly in the `Freeze` obligations we emit for transmute goals. We could use `rebind` instead on that goal, but I think it's better just to instantiate the binder.

Fixes #139538

r? `@lcnr` or reassign
2025-04-08 21:26:02 +02:00
Matthias Krüger af6d4f7165
Rollup merge of #139528 - Zalathar:no-logfile, r=jieyouxu
compiletest: Remove the `--logfile` flag

This flag is deprecated in libtest (#134283), and there's no evidence in-tree of this flag actually being passed to compiletest.

For detailed information about test results, bootstrap parses JSON output from compiletest instead (#108659).

As part of my experimental work on removing the libtest dependency from compiletest, it's useful to be able to disconnect libtest functionality that isn't needed.
2025-04-08 21:26:02 +02:00
Matthias Krüger 69fdbc5da4
Rollup merge of #139526 - smanilov:issue-139505, r=RalfJung
Fix deprecation note for std::intrinsics

Also checked the rest of the mentions of std::mem in the changed file and they look good to me.

Fixes #139505
2025-04-08 21:26:01 +02:00
Matthias Krüger 877f9819b0
Rollup merge of #139523 - BoxyUwU:rgd-push, r=jieyouxu
Rustc dev guide subtree update

r? `@jieyouxu`
2025-04-08 21:26:00 +02:00
Ralf Jung 8ffac51df8
Merge pull request #4252 from rust-lang/rustup-2025-04-07
Automatic Rustup
2025-04-07 07:18:31 +00:00
The Miri Cronjob Bot c11f0aa759 Merge from rustc 2025-04-07 05:24:10 +00:00
许杰友 Jieyou Xu (Joe) cdc10f0a22
Merge pull request #2318 from rust-lang/tshepang-patch-3
improve flow
2025-04-07 13:00:41 +08:00
Tshepang Mbambo e76ab78d1d
improve flow 2025-04-07 06:42:37 +02:00
许杰友 Jieyou Xu (Joe) 5f6d843eef
Merge pull request #2291 from rust-lang/rustc-pull
Rustc pull update
2025-04-07 12:37:32 +08:00
The rustc-dev-guide Cronjob Bot 216eb512fb Merge from rustc 2025-04-07 04:12:22 +00:00
The rustc-dev-guide Cronjob Bot e6458031c0 Preparing for merge from rustc 2025-04-07 04:06:33 +00:00
bors 372b40ba42 Auto merge of #138951 - jwnrt:alloc-raw-vec-strict-prov, r=Noratrieb
Replace last `usize` -> `ptr` transmute in `alloc` with strict provenance API

This replaces the `usize -> ptr` transmute in `RawVecInner::new_in` with a strict provenance API (`NonNull::without_provenance`).

The API is changed to take an `Alignment` which encodes the non-null constraint needed for `Unique` and allows us to do the construction safely.

Two internal-only APIs were added to let us avoid UB-checking in this hot code: `Layout::alignment` to get the `Alignment` type directly rather than as a `usize`, and `Unique::from_non_null` to create `Unique` in const context without a transmute.
2025-04-06 23:07:48 +00:00