Commit graph

298901 commits

Author SHA1 Message Date
bit-aloo
7018392337
remove noinline attribute and add alwaysinline after AD pass 2025-04-28 21:10:32 +05:30
Lukas Wirth
746c6899e9
Merge pull request #19708 from Veykril/push-wrmyowrzkxzz
refactor: De-arc lang item queries
2025-04-28 15:28:51 +00:00
Lukas Wirth
a839a6655a
Merge pull request #19542 from snprajwal/let-else-to-match
refactor: migrate `let_else_to_match` to editor
2025-04-28 15:27:28 +00:00
Lukas Wirth
d2ec47ed09
Merge pull request #19469 from snprajwal/merge-imports
refactor: `merge_imports` and `unmerge_imports` to editor
2025-04-28 15:25:57 +00:00
bjorn3
17403cd406 Fix rustc test suite 2025-04-28 15:25:25 +00:00
bjorn3
fcf198b539 Rustup to rustc 1.88.0-nightly (cb31a009e 2025-04-27) 2025-04-28 15:25:21 +00:00
bjorn3
41dbfa749f Sync from rust cb31a009e3 2025-04-28 15:25:08 +00:00
Lukas Wirth
f479012d0e refactor: De-arc lang item queries 2025-04-28 17:17:39 +02:00
bors
7d65abfe80 Auto merge of #123948 - azhogin:azhogin/async-drop, r=oli-obk
Async drop codegen

Async drop implementation using templated coroutine for async drop glue generation.

Scopes changes to generate `async_drop_in_place()` awaits, when async droppable objects are out-of-scope in async context.

Implementation details:
https://github.com/azhogin/posts/blob/main/async-drop-impl.md

New fields in Drop terminator (drop & async_fut). Processing in codegen/miri must validate that those fields are empty (in full version async Drop terminator will be expanded at StateTransform pass or reverted to sync version). Changes in terminator visiting to consider possible new successor (drop field).

ResumedAfterDrop messages for panic when coroutine is resumed after it is started to be async drop'ed.

Lang item for generated coroutine for async function async_drop_in_place. `async fn async_drop_in_place<T>()::{{closure0}}`.

Scopes processing for generate async drop preparations. Async drop is a hidden Yield, so potentially async drops require the same dropline preparation as for Yield terminators.

Processing in StateTransform: async drops are expanded into yield-point. Generation of async drop of coroutine itself added.

Shims for AsyncDropGlueCtorShim, AsyncDropGlue and FutureDropPoll.

```rust
#[lang = "async_drop"]
pub trait AsyncDrop {
    #[allow(async_fn_in_trait)]
    async fn drop(self: Pin<&mut Self>);
}

impl Drop for Foo {
    fn drop(&mut self) {
        println!("Foo::drop({})", self.my_resource_handle);
    }
}

impl AsyncDrop for Foo {
    async fn drop(self: Pin<&mut Self>) {
        println!("Foo::async drop({})", self.my_resource_handle);
    }
}
```

First async drop glue implementation re-worked to use the same drop elaboration code as for sync drop.
`async_drop_in_place` changed to be `async fn`. So both `async_drop_in_place` ctor and produced coroutine have their lang items (`AsyncDropInPlace`/`AsyncDropInPlacePoll`) and shim instances (`AsyncDropGlueCtorShim`/`AsyncDropGlue`).
```
pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) {
}
```
AsyncDropGlue shim generation uses `elaborate_drops::elaborate_drop` to produce drop ladder (in the similar way as for sync drop glue) and then `coroutine::StateTransform` to convert function into coroutine poll.

AsyncDropGlue coroutine's layout can't be calculated for generic T, it requires known final dropee type to be generated (in StateTransform). So, `templated coroutine` was introduced here (`templated_coroutine_layout(...)` etc).

Such approach overrides the first implementation using mixing language-level futures in https://github.com/rust-lang/rust/pull/121801.
2025-04-28 14:14:26 +00:00
Amanda Stjerna
b660ab9f69 Use associated types for SCC annotations, per code review suggestion 2025-04-28 14:59:04 +02:00
Amanda Stjerna
6c934f6564 Decouple SCC annotations from SCCs
This rewires SCC annotations to have them be a separate,
visitor-type data structure. It was broken out of #130227,
which needed them to be able to remove unused annotations
after computation without recomputing the SCCs themselves.

As a drive-by it also removes some redundant code from
the hot loop in SCC construction for a performance improvement.
2025-04-28 14:59:04 +02:00
Jakub Beránek
8fa5e3a571 Make bootstrap git tests more self-contained 2025-04-28 14:54:52 +02:00
Bastian Kersting
7082fa27a7 Rework the logic for PointerFinder::visit_place
This makes the implementation of our PointerFinder a bit more
straightforward.
2025-04-28 12:36:47 +00:00
Prajwal S N
32bf2ac529
refactor: migrate merge_imports to syntax editor
Co-authored-by: Tarek <tareknaser360@gmail.com>
Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
2025-04-28 17:32:36 +05:30
Prajwal S N
30eeab0381
chore: rename unmerge_use to unmerge_imports
Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
2025-04-28 17:32:05 +05:30
Prajwal S N
1b3374fb82
fix: migrate unmerge_use to syntax editor
Also ensures that attributes on the use item are applied to the new use
item when unmerging.

Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
2025-04-28 17:31:23 +05:30
DaniPopes
f07cc409d3
Rename sub_ptr to offset_from_unsigned in docs 2025-04-28 13:58:27 +02:00
Zalathar
cbfc3640b0 compiletest: Remove the libtest-based executor and its dependency
This patch has deliberately been kept small and simple, to make it easier to
revert if necessary. Further cleanup can take palce after we're confident that
it won't need to be reverted.
2025-04-28 21:57:23 +10:00
Prajwal S N
2231efa27d
refactor: migrate let_else_to_match to editor
Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
2025-04-28 17:19:17 +05:30
Guillaume Gomez
dd3ca71b4e
Rollup merge of #140379 - tshepang:rdg-push, r=jieyouxu
rustc-dev-guide subtree update
2025-04-28 13:30:47 +02:00
Guillaume Gomez
117202e535
Rollup merge of #140349 - marcoieni:codebuild-linux-large-runners, r=Kobzol
ci: use aws codebuild for the `dist-x86_64-linux` job

try-job: dist-x86_64-linux
2025-04-28 13:30:47 +02:00
Guillaume Gomez
64b3643454
Rollup merge of #140347 - marcoieni:free-disk-codebuild, r=jdno
ci: clean more disk space in codebuild

try-job: dist-arm-linux
2025-04-28 13:30:46 +02:00
Guillaume Gomez
92ba06357c Rollup merge of #140249 - BoxyUwU:remove_weak_alias_terminology, r=oli-obk
Remove `weak` alias terminology

I find the "weak" alias terminology to be quite confusing. It implies the existence of "strong" aliases (which do not exist) and I'm not really sure what about weak aliases is "weak". I much prefer "free alias" as the term. I think it's much more obvious what it means as "free function" is a well defined term that already exists in rust.

It's also a little confusing given "weak alias" is already a term in linker/codegen spaces which are part of the compiler too. Though I'm not particularly worried about that as it's usually very obvious if you're talking about the type system or not lol. I'm also currently trying to write documentation about aliases and it's somewhat awkward/confusing to be talking about *weak* aliases, when I'm not really sure what the basis for that as the term actually *is*.

I would also be happy to just find out there's a nice meaning behind calling them "weak" aliases :-)

r? `@oli-obk`

maybe we want a types MCP to decide on a specific naming here? or maybe we think its just too late to go back on this naming decision ^^'
2025-04-28 13:30:45 +02:00
Guillaume Gomez
cbc40c71c8
Rollup merge of #140316 - nnethercote:BoxMarker, r=dtolnay
Introduce `BoxMarker` to improve pretty-printing correctness

Box opening/closing is really easy to get wrong in the pretty-printers. This PR makes it much harder to get wrong.

r? `@Urgau`
2025-04-28 13:30:45 +02:00
Guillaume Gomez
7843686ffe
Rollup merge of #140249 - BoxyUwU:remove_weak_alias_terminology, r=oli-obk
Remove `weak` alias terminology

I find the "weak" alias terminology to be quite confusing. It implies the existence of "strong" aliases (which do not exist) and I'm not really sure what about weak aliases is "weak". I much prefer "free alias" as the term. I think it's much more obvious what it means as "free function" is a well defined term that already exists in rust.

It's also a little confusing given "weak alias" is already a term in linker/codegen spaces which are part of the compiler too. Though I'm not particularly worried about that as it's usually very obvious if you're talking about the type system or not lol. I'm also currently trying to write documentation about aliases and it's somewhat awkward/confusing to be talking about *weak* aliases, when I'm not really sure what the basis for that as the term actually *is*.

I would also be happy to just find out there's a nice meaning behind calling them "weak" aliases :-)

r? `@oli-obk`

maybe we want a types MCP to decide on a specific naming here? or maybe we think its just too late to go back on this naming decision ^^'
2025-04-28 13:30:45 +02:00
Guillaume Gomez
a782b54e01
Rollup merge of #140220 - GuillaumeGomez:doctest-main-wrapping, r=fmease
Fix detection of main function if there are expressions around it

Fixes #140162.
Fixes #139651.

Once this is merged, we can backport and I'll send a follow-up to emit a warning in case a `main` function is about to be "wrapped" (and therefore not run).

r? `@fmease`

try-job: x86_64-mingw-1
2025-04-28 13:30:44 +02:00
Guillaume Gomez
1a766a8772
Rollup merge of #140056 - yuk1ty:fix-static-mut-error-message, r=jieyouxu
Fix a wrong error message in 2024 edition

Fixes https://github.com/rust-lang/rust/issues/139952
2025-04-28 13:30:44 +02:00
Laurențiu Nicola
ce6a066339 Unelide lifetime 2025-04-28 14:16:43 +03:00
Lukas Wirth
62a48c5fed
Merge pull request #19706 from Veykril/push-nkpmknlvzyom
fix: Address minor FIXME
2025-04-28 10:12:20 +00:00
Lukas Wirth
99f00927cc fix: Address minor FIXME 2025-04-28 11:55:26 +02:00
Lukas Wirth
bb906cc06f
Merge pull request #19704 from Veykril/push-wrvznvvpvtvp
Add expression fill mode variant for filling with underscore expressions
2025-04-28 09:45:04 +00:00
Andrew Zhogin
c179f96fa9 AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
Andrew Zhogin
c366756a85 AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
joboet
5f145689b1
std: get rid of sys_common::process
Move the public `CommandEnvs` into the `process` module (and make it a wrapper type for an internal iterator type) and everything else into `sys::process` as per #117276.
2025-04-28 11:13:50 +02:00
Laurențiu Nicola
36ed4aaa2e Add foldhash license exception 2025-04-28 12:12:08 +03:00
Lukas Wirth
7e064c3072 Add expression fill mode variant for filling with underscore expressions 2025-04-28 10:39:36 +02:00
Laurențiu Nicola
5008c6a6c0
Merge pull request #19702 from lnicola/sync-from-rust
internal: Sync from downstream
2025-04-28 08:31:31 +00:00
bors
a932eb36f8 Auto merge of #123239 - Urgau:dangerous_implicit_autorefs, r=jdonszelmann,traviscross
Implement a lint for implicit autoref of raw pointer dereference - take 2

*[t-lang nomination comment](https://github.com/rust-lang/rust/pull/123239#issuecomment-2727551097)*

This PR aims at implementing a lint for implicit autoref of raw pointer dereference, it is based on #103735 with suggestion and improvements from https://github.com/rust-lang/rust/pull/103735#issuecomment-1370420305.

The goal is to catch cases like this, where the user probably doesn't realise it just created a reference.

```rust
pub struct Test {
    data: [u8],
}

pub fn test_len(t: *const Test) -> usize {
    unsafe { (*t).data.len() }  // this calls <[T]>::len(&self)
}
```

Since #103735 already went 2 times through T-lang, where they T-lang ended-up asking for a more restricted version (which is what this PR does), I would prefer this PR to be reviewed first before re-nominating it for T-lang.

----

Compared to the PR it is as based on, this PR adds 3 restrictions on the outer most expression, which must either be:
   1. A deref followed by any non-deref place projection (that intermediate deref will typically be auto-inserted)
   2. A method call annotated with `#[rustc_no_implicit_refs]`.
   3. A deref followed by a `addr_of!` or `addr_of_mut!`. See bottom of post for details.

There are several points that are not 100% clear to me when implementing the modifications:
 - ~~"4. Any number of automatically inserted deref/derefmut calls." I as never able to trigger this. Am I missing something?~~ Fixed
 - Are "index" and "field" enough?

----

cc `@JakobDegen` `@WaffleLapkin`
r? `@RalfJung`

try-job: dist-various-1
try-job: dist-various-2
2025-04-28 08:25:23 +00:00
Laurențiu Nicola
f89fcbeda2 Add bootstrap cfg 2025-04-28 11:16:21 +03:00
Laurențiu Nicola
1923f90dd3 Format code 2025-04-28 11:11:47 +03:00
Laurențiu Nicola
4d28d530f7 Merge from rust-lang/rust 2025-04-28 11:06:53 +03:00
Oli Scherer
bca637ce5d Add or-patterns to pattern types 2025-04-28 07:50:18 +00:00
Oli Scherer
b023856f29 Add or-patterns to pattern types 2025-04-28 07:50:18 +00:00
Oli Scherer
cb6d3715a5 Split out various pattern type matches into their own function 2025-04-28 07:46:50 +00:00
Oli Scherer
6008592fca Separate pattern lowering from pattern type lowering 2025-04-28 07:36:59 +00:00
Oli Scherer
2134793792 Directly generate TyPat instead of TyPatKind 2025-04-28 07:36:59 +00:00
Oli Scherer
6338e364f0 Pull ast pattern type parsing out into a separate function 2025-04-28 07:36:59 +00:00
Oli Scherer
96918a4bd5 Prevent pattern type macro invocations from having trailing tokens 2025-04-28 07:36:59 +00:00
Laurențiu Nicola
fdb5edefd0 Preparing for merge from rust-lang/rust 2025-04-28 09:52:59 +03:00
MarcoIeni
480d007616
ci: use aws codebuild for the dist-x86_64-linux job 2025-04-28 08:48:10 +02:00