inq
227a289461
add known-bug test for coroutine 'static-yields-non-'static unsoundness
...
Coroutine variant of the closure / impl Fn 'static unsoundness family.
References in PR description.
2026-05-05 17:44:35 +07:00
Jacob Adam
d14be60b5d
Convert the regression test for a coroutine ICE from a crash test to an UI test
2026-04-13 11:45:07 +01:00
bors
f8704be04f
Auto merge of #153416 - JonathanBrouwer:rollup-eezxWTV, r=JonathanBrouwer
...
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#153402 (miri subtree update)
- rust-lang/rust#152164 (Lint unused features)
- rust-lang/rust#152801 (Refactor WriteBackendMethods a bit)
- rust-lang/rust#153196 (Update path separators to be available in const context)
- rust-lang/rust#153204 (Add `#[must_use]` attribute to `HashMap` and `HashSet` constructors)
- rust-lang/rust#153317 (Abort after `representability` errors)
- rust-lang/rust#153276 (Remove `cycle_fatal` query modifier)
- rust-lang/rust#153300 (Tweak some of our internal `#[rustc_*]` TEST attributes)
- rust-lang/rust#153396 (use `minicore` in some `run-make` tests)
- rust-lang/rust#153401 (Migrationg of `LintDiagnostic` - part 7)
- rust-lang/rust#153406 (Remove a ping for myself)
- rust-lang/rust#153414 (Rename translation -> formatting)
2026-03-05 00:14:57 +00:00
Alan Egerton
55509a9fe4
Do not deduce parameter attributes during CTFE
...
`fn_abi_of_instance` can look at function bodies to deduce codegen
optimization attributes (namely `ArgAttribute::ReadOnly` and
`ArgAttribute::CapturesNone`) of indirectly-passed parameters. This can
lead to cycles when performed during typeck, when such attributes are
irrelevant.
This patch breaks a subquery out from `fn_abi_of_instance`,
`fn_abi_of_instance_no_deduced_attrs`, which returns the ABI before such
parameter attributes are deduced; and that new subquery is used in CTFE
instead.
2026-03-04 16:38:36 +00:00
mu001999
0436634084
Remove unused features in tests
2026-03-04 08:06:45 +08:00
bors
e0cb264b81
Auto merge of #141295 - Kivooeo:if-let-guard-stable, r=fee1-dead,est31
...
Stabilize `if let` guards (`feature(if_let_guard)`)
## Summary
This proposes the stabilization of `if let` guards (tracking issue: rust-lang/rust#51114 , RFC: rust-lang/rfcs#2294 ). This feature allows `if let` expressions to be used directly within match arm guards, enabling conditional pattern matching within guard clauses.
## What is being stabilized
The ability to use `if let` expressions within match arm guards.
Example:
```rust
enum Command {
Run(String),
Stop,
Pause,
}
fn process_command(cmd: Command, state: &mut String) {
match cmd {
Command::Run(name) if let Some(first_char) = name.chars().next() && first_char.is_ascii_alphabetic() => {
// Both `name` and `first_char` are available here
println!("Running command: {} (starts with '{}')", name, first_char);
state.push_str(&format!("Running {}", name));
}
Command::Run(name) => {
println!("Cannot run command '{}'. Invalid name.", name);
}
Command::Stop if state.contains("running") => {
println!("Stopping current process.");
state.clear();
}
_ => {
println!("Unhandled command or state.");
}
}
}
```
## Motivation
The primary motivation for `if let` guards is to reduce nesting and improve readability when conditional logic depends on pattern matching. Without this feature, such logic requires nested `if let` statements within match arms:
```rust
// Without if let guards
match value {
Some(x) => {
if let Ok(y) = compute(x) {
// Both `x` and `y` are available here
println!("{}, {}", x, y);
}
}
_ => {}
}
// With if let guards
match value {
Some(x) if let Ok(y) = compute(x) => {
// Both `x` and `y` are available here
println!("{}, {}", x, y);
}
_ => {}
}
```
## Implementation and Testing
The feature has been implemented and tested comprehensively across different scenarios:
### Core Functionality Tests
**Scoping and variable binding:**
- [`scope.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/scope.rs ) - Verifies that bindings created in `if let` guards are properly scoped and available in match arms
- [`shadowing.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/shadowing.rs ) - Tests that variable shadowing works correctly within guards
- [`scoping-consistency.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/scoping-consistency.rs ) - Ensures temporaries in guards remain valid for the duration of their match arms
**Type system integration:**
- [`type-inference.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/type-inference.rs ) - Confirms type inference works correctly in `if let` guards
- [`typeck.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/typeck.rs ) - Verifies type mismatches are caught appropriately
**Pattern matching semantics:**
- [`exhaustive.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/exhaustive.rs ) - Validates that `if let` guards are correctly handled in exhaustiveness analysis
- [`move-guard-if-let.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/move-guard-if-let.rs ) and [`move-guard-if-let-chain.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/move-guard-if-let-chain.rs ) - Test that conditional moves in guards are tracked correctly by the borrow checker
### Error Handling and Diagnostics
- [`warns.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/warns.rs ) - Tests warnings for irrefutable patterns and unreachable code in guards
- [`parens.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/parens.rs ) - Ensures parentheses around `let` expressions are properly rejected
- [`macro-expanded.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/macro-expanded.rs ) - Verifies macro expansions that produce invalid constructs are caught
- [`guard-mutability-2.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/guard-mutability-2.rs ) - Tests mutability and ownership violations in guards
- [`ast-validate-guards.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.rs ) - Validates AST-level syntax restrictions
### Drop Order and Temporaries
**Key insight:** Unlike `let_chains` in regular `if` expressions, `if let` guards do not have drop order inconsistencies because:
1. Match guards are clearly scoped to their arms
2. There is no "else block" equivalent that could cause temporal confusion
- [`drop-order.rs`](https://github.com/rust-lang/rust/blob/5796073c134eaac30475f9a19462c4e716c9119c/tests/ui/rfcs/rfc-2294-if-let-guard/drop-order.rs ) - Check drop order of temporaries create in match guards
- [`compare-drop-order.rs`](https://github.com/rust-lang/rust/blob/aef3f5fdf052fbbc16e174aef5da6d50832ca316/tests/ui/rfcs/rfc-2294-if-let-guard/compare-drop-order.rs ) - Compares drop order between `if let` guards and nested `if let` in match arms, confirming they behave identically across all editions
- rust-lang/rust#140981 - A complicated drop order test involved `let chain` was made by @est31
- [`drop-order-comparisons-let-chains.rs`](https://github.com/rust-lang/rust/blob/902b4d28783e03e231d8513082cc30c4fcce5d95/tests/ui/drop/drop-order-comparisons-let-chains.rs ) - Compares drop order between `let chains` in `if let guard` and regular `if` expressions
- [`if-let-guards.rs`](https://github.com/rust-lang/rust/blob/5650d716e0589e2e145ce9027f35bd534e5f862a/tests/ui/drop/if-let-guards.rs ) - Test correctness of drop order for bindings and temporaries
- [`if-let-guards-2`](https://github.com/rust-lang/rust/blob/3a6c8c8f3d7ae654fdb6ce1255182bda21680655/tests/ui/drop/if-let-guards-2.rs ) - The same test as above but more comprehensive and tests more interactions between different features and their drop order, checking that drop order is correct, created by @traviscross
## Edition Compatibility
This feature stabilizes on all editions, unlike `let chains` which was limited to edition 2024. This is safe because:
1. `if let` guards don't suffer from the drop order issues that affected `let chains` in regular `if` expressions
2. The scoping is unambiguous - guards are clearly tied to their match arms
3. Extensive testing confirms identical behavior across all editions
## Interactions with Future Features
The lang team has reviewed potential interactions with planned "guard patterns" and determined that stabilizing `if let` guards now does not create obstacles for future work. The scoping and evaluation semantics established here align with what guard patterns will need.
## Unresolved Issues
- [x] - rust-lang/rust#140981
- [x] - added tests description by @jieyouxu request
- [x] - Concers from @scottmcm about stabilizing this across all editions
- [x] - check if drop order in all edition when using `let chains` inside `if let` guard is the same
- [x] - interactions with guard patters
- [x] - pattern bindings drops before guard bindings https://github.com/rust-lang/rust/pull/143376
- [x] - documentaion (https://github.com/rust-lang/reference/pull/1957 )
- [ ] (non-blocking) add tests for [this](https://github.com/rust-lang/rust/issues/145237 ) and [this](https://github.com/rust-lang/rust/pull/141295#issuecomment-3173059821 )
---
**Related:**
- Tracking Issue: rust-lang/rust#51114
- RFC: rust-lang/rfcs#2294
- Documentation PR: https://github.com/rust-lang/reference/pull/1957
2026-02-18 20:49:50 +00:00
Stuart Cook
1367126837
Rollup merge of #151783 - mu001999-contrib:impl/final-method, r=fee1-dead
...
Implement RFC 3678: Final trait methods
Tracking: https://github.com/rust-lang/rust/issues/131179
This PR is based on rust-lang/rust#130802 , with some minor changes and conflict resolution.
Futhermore, this PR excludes final methods from the vtable of a dyn Trait.
And some excerpt from the original PR description:
> Implements the surface part of https://github.com/rust-lang/rfcs/pull/3678 .
>
> I'm using the word "method" in the title, but in the diagnostics and the feature gate I used "associated function", since that's more accurate.
cc @joshtriplett
2026-02-17 13:02:21 +11:00
Ralf Jung
5e65109f21
add write_box_via_move intrinsic and use it for vec!
...
This allows us to get rid of box_new entirely
2026-02-16 17:27:40 +01:00
Kivooeo
964b63f42e
if let guard stabilize
2026-02-16 12:24:15 +00:00
mu001999
7077797f52
Parse and lower final for methods
...
Co-authored-by: Michael Goulet <michael@errs.io >
2026-02-12 15:12:29 +08:00
Lukas Bergdoll
2f3b952349
Stabilize assert_matches
2026-02-11 14:13:44 +01:00
Adwin White
f248395394
bless tests
2026-02-09 15:09:43 +08:00
Esteban Küber
4a27be6972
Do not mention -Zmacro-backtrace for std macros that are a wrapper around a compiler intrinsic
2026-01-26 17:34:31 +00:00
Lukas Bergdoll
58be5d6620
Move assert_matches to planned stable path
2026-01-21 23:17:24 +01:00
Esteban Küber
cafe91749f
On unmet trait bound, mention if trait is unstable
2026-01-13 01:16:58 +00:00
Jamie Hill-Daniel
c96ff2d429
Remove uses of cfg(any()/all())
2025-12-10 23:41:19 +00:00
Christian Poveda
7ae2823bc6
Gate 2018 UI tests
2025-11-27 14:13:58 -05:00
Christian Poveda
b2ab7cf980
Gate 2015 UI tests
2025-11-27 11:19:00 -05:00
Jana Dönszelmann
c1318053e3
add test for trait-system-refactor-initiative/239
2025-10-01 00:47:58 +02:00
Guillaume Gomez
a535c7be54
Ignore more failing ui tests for GCC backend
2025-09-26 15:33:48 +02:00
lcnr
7a0adc0878
add test
2025-09-24 15:02:41 +02:00
Camille Gillot
3934fc9eb2
Consider errors in MIR as impossible predicates.
2025-09-21 03:26:21 +00:00
Esteban Küber
049c32797b
On E0277, point at type that doesn't implement bound
...
When encountering an unmet trait bound, point at local type that doesn't implement the trait:
```
error[E0277]: the trait bound `Bar<T>: Foo` is not satisfied
--> $DIR/issue-64855.rs:9:19
|
LL | pub struct Bar<T>(<Self as Foo>::Type) where Self: ;
| ^^^^^^^^^^^^^^^^^^^ unsatisfied trait bound
|
help: the trait `Foo` is not implemented for `Bar<T>`
--> $DIR/issue-64855.rs:9:1
|
LL | pub struct Bar<T>(<Self as Foo>::Type) where Self: ;
| ^^^^^^^^^^^^^^^^^
```
2025-08-22 17:55:15 +00:00
Jacob Pratt
f49d69093e
Rollup merge of #145604 - compiler-errors:static-closure, r=fmease
...
Gate static closures behind a parser feature
I'd like to gate `static ||` closures behind a feature gate, since we shouldn't allow people to take advantage of this syntax if it's currently unstable. Right now, since it's only rejected after ast lowering, it's accessible to macros.
Let's crater this to see if we can claw it back without breaking anyone's code.
2025-08-21 17:57:52 -04:00
Karol Zwolak
d14b83e378
bless tests with new lint messages
2025-08-19 21:27:10 +02:00
Michael Goulet
db0c825d2c
Gate static coroutines behind a parser feature
2025-08-19 13:12:31 +00:00
Jonathan Brouwer
4bb7bf64e0
Update uitests
...
Signed-off-by: Jonathan Brouwer <jonathantbrouwer@gmail.com >
2025-08-14 18:18:42 +02:00
Michael Goulet
e9765781b2
Remove the witness type from coroutine args
2025-07-31 17:38:28 +00:00
Michael Goulet
d525e79157
Stall coroutines based off of ty::Coroutine, not ty::CoroutineWitness
2025-07-31 17:31:51 +00:00
Michael Goulet
2db97b2f7d
Account for .yield in illegal postfix operator message
2025-07-28 16:09:59 +00:00
Matthias Krüger
58f10376f4
Rollup merge of #144226 - cjgillot:known-panics-panics, r=oli-obk
...
Do not assert layout in KnownPanicsLint.
Fixes rust-lang/rust#121176
Fixes rust-lang/rust#129109
Fixes rust-lang/rust#130970
Fixes rust-lang/rust#131347
Fixes rust-lang/rust#139872
Fixes rust-lang/rust#140332
2025-07-27 10:19:00 +02:00
Camille GILLOT
8817572b45
Do not check Sync during type_of.
2025-07-26 21:53:13 +00:00
Camille GILLOT
7c6496145f
Check statics' type in type_of.
2025-07-25 23:39:26 +00:00
Camille GILLOT
ec8146477e
Look at layout for completeness.
2025-07-25 23:07:31 +00:00
Guillaume Gomez
de93fb13fe
Add ignore-backends annotations in failing GCC backend ui tests
2025-07-23 13:48:04 +02:00
Michael Goulet
216cdb7b22
Eagerly unify coroutine witness in old solver
2025-07-17 17:42:28 +00:00
Esteban Küber
8c3a033d7f
Add edition checks for some tests that had divergent output
...
In order to expose edition dependent divergences in some tests in the test suite, add explicit `edition` annotations. Some of these tests might require additional work to *avoid* the divergences, as they might have been unintentional. These are not exhaustive changes, purely opportunistic while looking at something else.
2025-06-25 17:02:26 +00:00
Esteban Küber
f1fb323dda
Do not use gen as binding name
...
If we ever start testing every edition, using a new keyword unnecessarily will cause divergent output, so pre-emptively change `gen` into `generator`.
2025-06-25 16:52:31 +00:00
Matthias Krüger
db23a76217
Rollup merge of #141811 - mejrs:bye_locals, r=compiler-errors
...
Unimplement unsized_locals
Implements https://github.com/rust-lang/compiler-team/issues/630
Tracking issue here: https://github.com/rust-lang/rust/issues/111942
Note that this just removes the feature, not the implementation, and does not touch `unsized_fn_params`. This is because it is required to support `Box<dyn FnOnce()>: FnOnce()`.
There may be more that should be removed (possibly in follow up prs)
- the `forget_unsized` function and `forget` intrinsic.
- the `unsized_locals` test directory; I've just fixed up the tests for now
- various codegen support for unsized values and allocas
cc ``@JakobDegen`` ``@oli-obk`` ``@Noratrieb`` ``@programmerjake`` ``@bjorn3``
``@rustbot`` label F-unsized_locals
Fixes rust-lang/rust#79409
2025-06-14 11:27:10 +02:00
Mara Bos
ff5ba7aa74
Update tests.
2025-06-13 09:20:48 +02:00
mejrs
c0e02e26b3
Unimplement unsized_locals
2025-06-13 01:16:36 +02:00
Matthias Krüger
bfd8abd8f3
Rollup merge of #141069 - chenyukang:yukang-fix-137486-suggest-mut, r=davidtwco
...
Suggest mut when possbile for temporary value dropped while borrowed
Fixes #137486
2025-06-12 22:09:41 +02:00
Esteban Küber
ac980cace8
Make obligation cause code suggestions verbose
...
```
error[E0277]: `()` is not a future
--> $DIR/unnecessary-await.rs:28:10
|
LL | e!().await;
| ^^^^^ `()` is not a future
|
= help: the trait `Future` is not implemented for `()`
= note: () must be a future or must implement `IntoFuture` to be awaited
= note: required for `()` to implement `IntoFuture`
help: remove the `.await`
|
LL - e!().await;
LL + e!();
|
```
```
error[E0277]: the trait bound `String: Copy` is not satisfied
--> $DIR/const-fn-in-vec.rs:1:47
|
LL | static _MAYBE_STRINGS: [Option<String>; 5] = [None; 5];
| ^^^^ the trait `Copy` is not implemented for `String`
|
= note: required for `Option<String>` to implement `Copy`
= note: the `Copy` trait is required because this value will be copied for each element of the array
help: create an inline `const` block
|
LL | static _MAYBE_STRINGS: [Option<String>; 5] = [const { None }; 5];
| +++++++ +
```
2025-06-06 20:12:11 +00:00
Oli Scherer
5fbdfc3e10
Add iter macro
...
This adds an `iter!` macro that can be used to create movable
generators.
This also adds a yield_expr feature so the `yield` keyword can be used
within iter! macro bodies. This was needed because several unstable
features each need `yield` expressions, so this allows us to stabilize
them separately from any individual feature.
Co-authored-by: Oli Scherer <github35764891676564198441@oli-obk.de >
Co-authored-by: Jieyou Xu <jieyouxu@outlook.com >
Co-authored-by: Travis Cross <tc@traviscross.com >
2025-06-03 10:52:32 -07:00
Lukas Wirth
aba70e8f9d
Add missing dyn keywords to tests that do not test for them
...
This ensures that these tests can be run on editions other than 2015
2025-06-02 11:02:50 +02:00
yukang
d5d4cecee9
Suggest mut when possbile for temporary value dropped while borrowed
2025-05-27 22:19:56 +08:00
lcnr
667504b176
check coroutines with TypingMode::Borrowck to avoid cyclic reasoning
...
MIR borrowck taints its output if an obligation fails. This could then cause
`check_coroutine_obligations` to silence its error, causing us to not emit
and actual error and ICE.
2025-05-17 12:28:21 +00:00
Vadim Petrochenkov
20faf8532b
compiletest: Make diagnostic kind mandatory on line annotations
2025-04-30 10:44:24 +03:00
lcnr
ee9bdcabe5
add regression test
2025-04-25 19:13:41 +00:00
Michael Goulet
f943f73db4
More
2025-04-23 15:09:25 +00:00