Guillaume Gomez
bb2d55e2ec
Add new MultiSpan methods: push_primary_span, push_span_diag and span_labels_raw
2026-02-21 12:46:53 +01:00
bors
59fd4ef94d
Auto merge of #152747 - nnethercote:bring-back-enum-DepKind, r=Zalathar
...
Bring back `enum DepKind`.
*[View all comments](https://triagebot.infra.rust-lang.org/gh-comments/rust-lang/rust/pull/152747 )*
It was removed in rust-lang/rust#115920 to enable it being moved to `rustc_query_system`, a move that has recently been reversed. It's much simpler as an enum.
r? @Zalathar
2026-02-20 06:07:20 +00:00
bors
ef70767064
Auto merge of #152689 - scottmcm:also-simplify-of-sized-val-alt, r=cjgillot
...
Simplify `size/align_of_val<T: Sized>` to `size/align_of<T>` instead
This is relevant to things like `Box<[u8; 1024]>` where the drop looks at the `size_of_val` (since obviously it might be DST in general) but where we don't actually need to do that since it's always that same value for the `Sized` type.
(Equivalent to rust-lang/rust#152681 , but flipped in the rebase so it can land before rust-lang/rust#152641 instead of depending on it.)
2026-02-19 22:03:50 +00:00
bors
7f99507f57
Auto merge of #149375 - oli-obk:const_typeck, r=fee1-dead
...
Perform many const checks in typeck
Some smaller diagnostic changes, the biggest ones avoided by https://github.com/rust-lang/rust/pull/148641
We should be able to move various checks in mir const checking to using `span_bug!` instead of reporting an error, just like mir typeck does as a sanity check. I would like to start doing so separately though, as this PR is a big enough (in what effects it causes, pun intended).
r? @fee1-dead
2026-02-19 18:41:36 +00:00
bors
b6bed6f2d9
Auto merge of #152839 - JonathanBrouwer:rollup-iPaprtK, r=JonathanBrouwer
...
Rollup of 9 pull requests
Successful merges:
- rust-lang/rust#151733 (Use function shims to make sure EII works on apple targets)
- rust-lang/rust#152558 (rustc_expand: improve diagnostics for non-repeatable metavars in repetition)
- rust-lang/rust#152596 (Make all multipart suggestions verbose)
- rust-lang/rust#152815 (Add CURRENT_RUSTC_VERSION support for Clippy)
- rust-lang/rust#152733 (Port #[rustc_doc_primitive] to the new attribute parser)
- rust-lang/rust#152817 (Update enzyme submodule to match upstream)
- rust-lang/rust#152819 (explicitly show behavior of <_>::assoc_fn)
- rust-lang/rust#152823 (fix stale comments left over from ed3711e )
- rust-lang/rust#152824 (Enable "View all comments" link feature in `triagebot.toml`)
2026-02-19 14:07:01 +00:00
Jonathan Brouwer
f17139477b
Rollup merge of #152819 - yaahc:explicit_probe_assembly, r=Kivooeo
...
explicitly show behavior of <_>::assoc_fn
Inspired by a conversation with @lcnr about type relative name resolution.
From lcnr:
> and i hate the fact that this match isn't exhaustive (hiding the behavior for `<_>::assoc_fn` https://github.com/rust-lang/rust/blob/13c38730d981289cc7ae4cc109fd7756bf83ee67/compiler/rustc_hir_typeck/src/method/probe.rs#L893
This PR changes that match to be exhaustive.
2026-02-19 10:56:40 +01:00
Jonathan Brouwer
9a90ad485e
Rollup merge of #152733 - Ozzy1423:attr-doc, r=jdonszelmann
...
Port #[rustc_doc_primitive] to the new attribute parser
Tracking issue: https://github.com/rust-lang/rust/issues/131229
r? @JonathanBrouwer
2026-02-19 10:56:39 +01:00
Jonathan Brouwer
9330931a2b
Rollup merge of #152596 - estebank:multipart_suggestions, r=petrochenkov
...
Make all multipart suggestions verbose
The ShowAlways style of suggestions is usually easier to understand than the inline style.
2026-02-19 10:56:37 +01:00
Jonathan Brouwer
610e63b9ba
Rollup merge of #152558 - Unique-Usman:ua/decmacrorepeatable, r=estebank
...
rustc_expand: improve diagnostics for non-repeatable metavars in repetition
Enhance `NoSyntaxVarsExprRepeat` by suggesting similarly named metavariables, distinguishing repeatable vs non-repeatable bindings, and listing available repeatable variables when no match exists.
2026-02-19 10:56:37 +01:00
Jonathan Brouwer
46126ac931
Rollup merge of #151733 - jdonszelmann:eii-on-apple, r=oli-obk
...
Use function shims to make sure EII works on apple targets
Use function shims to make sure EII works on apple targets (and generally accepts target-arch attributes)
Explainer: https://github.com/rust-lang/rust/pull/146348#issuecomment-3631810110
Tracking issue: https://github.com/rust-lang/rust/issues/125418
2026-02-19 10:56:36 +01:00
bors
41198cb965
Auto merge of #148034 - dianqk:matchbr-copy, r=cjgillot
...
Simplify the canonical enum clone branches to a copy statement
I have overhauled MatchBranchSimplification in this PR. This pass tries to unify statements one by one, which is more readable and extensible.
This PR also unifies the following pattern that is mostly generated by GVN into one basic block that contains the copy statement:
```rust
match a {
Foo::A(_) => *a,
Foo::B => Foo::B
}
```
Fixes https://github.com/rust-lang/rust/issues/128081 .
2026-02-19 09:56:26 +00:00
bors
fbd6934114
Auto merge of #152825 - JonathanBrouwer:rollup-0YvwE70, r=JonathanBrouwer
...
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#152799 (Subtree sync for rustc_codegen_cranelift)
- rust-lang/rust#152814 (stdarch subtree update)
- rust-lang/rust#151059 (x86: support passing `u128`/`i128` to inline assembly)
- rust-lang/rust#152097 (Suggest local variables for captured format args)
- rust-lang/rust#152734 (Respect the `--ci` flag in more places in bootstrap)
- rust-lang/rust#151703 (Fix ICE in transmutability error reporting when type aliases are normalized)
- rust-lang/rust#152173 (Reflection TypeKind::FnPtr)
- rust-lang/rust#152564 (Remove unnecessary closure.)
- rust-lang/rust#152628 (tests: rustc_public: Check const allocation for all variables (1 of 11 was missing))
- rust-lang/rust#152658 (compiletest: normalize stderr before SVG rendering)
- rust-lang/rust#152766 (std::r#try! - avoid link to nightly docs)
- rust-lang/rust#152780 (Remove some clones in deriving)
- rust-lang/rust#152787 (Add a mir-opt test for alignment check generation [zero changes outside tests])
- rust-lang/rust#152790 (Fix incorrect target in aarch64-unknown-linux-gnu docs)
- rust-lang/rust#152792 (Fix an ICE while checking param env shadowing on an erroneous trait impl)
- rust-lang/rust#152793 (Do no add -no-pie on Windows)
- rust-lang/rust#152803 (Avoid delayed-bug ICE for malformed diagnostic attrs)
- rust-lang/rust#152806 (interpret: fix comment typo)
2026-02-19 04:18:20 +00:00
Nicholas Nethercote
1c8abe6d26
Adjust a module visibility.
2026-02-19 09:05:39 +11:00
Nicholas Nethercote
baa74a85ee
Remove DepKind name plumbing.
...
There is a bunch of plumbing to record the string `"foo"` for each
variant `DepKind::foo`. But that's what the `Debug `impl` now produces.
So this commit removes the plumbing.
2026-02-19 09:05:39 +11:00
Nicholas Nethercote
c4a69d4712
Bring back enum DepKind.
...
It was removed in #115920 to enable it being moved to
`rustc_query_system`, a move that has recently been reversed. It's much
simpler as an enum.
Also:
- Remove the overly complicated `Debug` impl for `DepKind`.
- Remove the trivial `DepKind` associated constants (`NULL` et al.)
- Add an assertion to ensure that the number of `DepKinds` fits within a
`u16`.
- Rename `DEP_KIND_VARIANTS` as `DEP_KIND_NUM_VARIANTS`, to make it
clearer that it's a count, not a collection.
- Use `stringify!` in one place to make the code clearer.
2026-02-19 09:05:37 +11:00
Nicholas Nethercote
90b994b883
Rename query dep_kind.
...
The next commit will bring back `enum DepKind` and there would be a
variant `DepKind::dep_kind`. This makes it impossible to have a variable
named `dep_kind`, because the `bindings_with_variant_name` lint is
overzealous. For this code:
```
let dep_kind = DepKind::dep_kind;
```
the lint will give this error:
```
pattern binding `dep_kind` is named the same as one of the variants of the type `DepKind`
```
This is arguably a bug in the lint. To work around it, this commit
renames the `dep_kind` query as `crate_dep_kind`. It is a better name
anyway given that `DepKind` and `CrateDepKind` are different things.
2026-02-19 08:56:43 +11:00
Nicholas Nethercote
1d410c5831
Fix a typo.
2026-02-19 08:56:42 +11:00
Jonathan Brouwer
689301f4e4
Rollup merge of #152806 - RalfJung:interpret-typo, r=Kivooeo
...
interpret: fix comment typo
Pointed out in https://github.com/rust-lang/rust/pull/152756#pullrequestreview-3819458236 after that PR already had been rolled up.
2026-02-18 22:19:55 +01:00
Jonathan Brouwer
462a348042
Rollup merge of #152803 - TaKO8Ki:fix-152744-diagnostic-attr-ice, r=JonathanBrouwer
...
Avoid delayed-bug ICE for malformed diagnostic attrs
Fixes rust-lang/rust#152744
Skip suggestions in `expected_lit` when parsing with `Recovery::Forbidden`, since this may later cancel `InvalidMetaItem`. This avoids creating delayed bugs that can be promoted to ICE.
2026-02-18 22:19:55 +01:00
Jonathan Brouwer
a1e029b8ba
Rollup merge of #152793 - mati865:disable-no-pie-on-windows, r=petrochenkov
...
Do no add -no-pie on Windows
Windows binaries are always position independent and Clang warns when trying to enable or disable that:
```
❯ clang hello.c -pie
clang: warning: argument unused during compilation: '-pie' [-Wunused-command-line-argument]
❯ clang hello.c -no-pie
clang: warning: argument unused during compilation: '-no-pie' [-Wunused-command-line-argument]
```
https://github.com/rust-lang/rust/pull/149937 will turn these warnings into build errors:
```
❯ cargo rustc -- -D linker-messages
Compiling hello v0.1.0 (E:\tmp\hello)
error: linker stderr: x86_64-w64-mingw32-clang: argument unused during compilation: '-nolibc' [-Wunused-command-line-argument]␍
x86_64-w64-mingw32-clang: argument unused during compilation: '-no-pie' [-Wunused-command-line-argument]␍
|
= note: requested on the command line with `-D linker-messages`
error: could not compile `hello` (bin "hello") due to 1 previous error
```
2026-02-18 22:19:54 +01:00
Jonathan Brouwer
a28a4845e7
Rollup merge of #152792 - ShoyuVanilla:issue-152663, r=petrochenkov
...
Fix an ICE while checking param env shadowing on an erroneous trait impl
Fixes https://github.com/rust-lang/rust/issues/152663
2026-02-18 22:19:53 +01:00
Jonathan Brouwer
17a2e09068
Rollup merge of #152780 - camsteffen:less-clone, r=Kivooeo
...
Remove some clones in deriving
Just factoring away a few `.clone()`s.
2026-02-18 22:19:52 +01:00
Jonathan Brouwer
b54436c4ca
Rollup merge of #152564 - nnethercote:rm-closure-gcx, r=adwinwhite
...
Remove unnecessary closure.
The comments that says it's necessary is wrong.
r? @adwinwhite
2026-02-18 22:19:49 +01:00
Jonathan Brouwer
5d6c830832
Rollup merge of #152173 - 9SonSteroids:fn_ptr_type_info, r=oli-obk
...
Reflection TypeKind::FnPtr
This is for https://github.com/rust-lang/rust/issues/146922 .
Const-eval currently lacks full support for function pointer (fn) types. We should implement handling of FnPtr TypeKind, covering safe and unsafe functions, Rust and custom ABIs, input and output types, higher-ranked lifetimes, and variadic functions.
2026-02-18 22:19:49 +01:00
Jonathan Brouwer
d7ad9f7ec9
Rollup merge of #151703 - zedddie:fix-151462-ice, r=jdonszelmann
...
Fix ICE in transmutability error reporting when type aliases are normalized
Fixes rust-lang/rust#151462
Transmutability error reporting hit an ICE when type aliases were normalized for diagnostics. For example, when type
`JustUnit = ()` normalizes to `()`, the check passes unexpectedly even though the original check with `JustUnit` failed.
Fixed by adding a retry in the `Answer::Yes` arm that checks with the root obligation's types before panicking. The retry only occurs when the root obligation differs and is a Transmute trait predicate.
Also added a test that reproduces the original ICE.
2026-02-18 22:19:48 +01:00
Jonathan Brouwer
57178ef5d2
Rollup merge of #152097 - JohnTitor:issue-114108, r=BoxyUwU
...
Suggest local variables for captured format args
Fixes https://github.com/rust-lang/rust/issues/114108
2026-02-18 22:19:47 +01:00
Jonathan Brouwer
1607bc1288
Rollup merge of #151059 - folkertdev:x86-u128-reg, r=Amanieu
...
x86: support passing `u128`/`i128` to inline assembly
tracking issue: https://github.com/rust-lang/rust/issues/133416
Seems like an oversight. LLVM has supported this since 2019, see https://github.com/llvm/llvm-project/issues/42502 . I've put this under `asm_experimental_reg`.
cc @taiki-e
r? @Amanieu
2026-02-18 22:19:46 +01:00
Jonathan Brouwer
90ac20f430
Rollup merge of #152799 - bjorn3:sync_cg_clif-2026-02-18, r=bjorn3
...
Subtree sync for rustc_codegen_cranelift
The highlight this time is a Cranelift update.
r? @ghost
@rustbot label +A-codegen +A-cranelift +T-compiler
2026-02-18 22:19:45 +01: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
Oscar Bray
bd54cd66a1
Port #[rustc_doc_primitive] to the new attribute parser
2026-02-18 20:13:19 +00:00
Jane Losare-Lusby
0487f58fba
explicitly show behavior of <_>::assoc_fn
2026-02-18 11:51:44 -08:00
Esteban Küber
37684bdfc5
Make all multipart suggestions verbose
...
The ShowAlways style of suggestions is usually easier to understand than the inline style.
2026-02-18 18:33:35 +00:00
Ralf Jung
3cb093af1f
interpret: fix comment typo
2026-02-18 18:22:26 +01:00
Takayuki Maeda
61c9af20c7
avoid delayed-bug ICE for malformed diagnostic attrs
...
remove -Znext-solver from ui tests
2026-02-19 01:43:26 +09:00
jasper3108
7287be9006
Implement reflection support for function pointer types and add tests
...
- Implement handling of FnPtr TypeKind in const-eval, including:
- Unsafety flag (safe vs unsafe fn)
- ABI variants (Rust, Named(C), Named(custom))
- Input and output types
- Variadic function pointers
- Add const-eval tests covering:
- Basic Rust fn() pointers
- Unsafe fn() pointers
- Extern C and custom ABI pointers
- Functions with multiple inputs and output types
- Variadic functions
- Use const TypeId checks to verify correctness of inputs, outputs, and payloads
2026-02-18 17:18:16 +01:00
bjorn3
14b7c8216e
Format jit-helper.py
2026-02-18 15:22:36 +00:00
bjorn3
fb63550549
Fix broken merge
2026-02-18 15:10:37 +00:00
bjorn3
87ba622af7
Merge commit 'abdb98ad4b47117ee3be17b1e43fab34f18f5805' into sync_cg_clif-2026-02-18
2026-02-18 15:02:27 +00:00
Usman Akinyemi
88e96b8814
rustc_expand: improve diagnostics for non-repeatable metavars in repetition
...
Enhance `NoSyntaxVarsExprRepeat` by suggesting similarly named
metavariables, distinguishing repeatable vs non-repeatable bindings,
and listing available repeatable variables when no match exists.
Co-authored-by: Esteban Küber <esteban@kuber.com.ar >
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com >
2026-02-18 20:14:36 +05:30
Jana Dönszelmann
91064bff99
dont enforce tails
2026-02-18 15:12:33 +01:00
Yuki Okushi
8ea3542a9a
Suggest local variables for captured format args on note
2026-02-18 19:39:51 +09:00
Mateusz Mikuła
92e60a324f
Do no add -no-pie on Windows
...
Windows binaries are always position independent
and Clang warns when trying to enable or disable
that:
```
❯ clang hello.c -pie
clang: warning: argument unused during compilation: '-pie' [-Wunused-command-line-argument]
❯ clang hello.c -no-pie
clang: warning: argument unused during compilation: '-no-pie' [-Wunused-command-line-argument]
```
2026-02-18 11:24:13 +01:00
Shoyu Vanilla
fb94e5883e
Fix an ICE while checking param env shadowing on an erroneous trait impl
2026-02-18 19:14:26 +09:00
Stuart Cook
8a2c6ea409
Rollup merge of #152778 - mu001999-contrib:fix/final-method, r=fmease
...
Update tracking issue number for final_associated_functions
From https://github.com/rust-lang/rust/pull/151783#discussion_r2816929026
2026-02-18 17:29:51 +11:00
Stuart Cook
123611f208
Rollup merge of #152756 - RalfJung:miri-recursive-box, r=Kivooeo
...
Miri: recursive validity: also recurse into Boxes
Now that https://github.com/rust-lang/rust/issues/97270 is fixed, the recursive validity mode for Miri can recuse into Boxes without exploding everywhere.
2026-02-18 17:29:50 +11:00
Stuart Cook
e53dd52e16
Rollup merge of #152749 - cyrgani:rustc-allow-const, r=jdonszelmann
...
make `rustc_allow_const_fn_unstable` an actual `rustc_attrs` attribute
It is already named like one, but used to have its own feature gate, which this PR now removes in favor of just using `#![feature(rustc_attrs)]`.
Most of the diff is just the line number changes in `malformed-attrs.stderr`.
2026-02-18 17:29:49 +11:00
Stuart Cook
e8327b0a79
Rollup merge of #152745 - TaKO8Ki:fix-ice-suggest-param-env-shadowing-incompatible-args, r=Kivooeo
...
Fix ICE in `suggest_param_env_shadowing` with incompatible args
Fixes rust-lang/rust#152684
2026-02-18 17:29:49 +11:00
Stuart Cook
8f3bbc1f5a
Rollup merge of #152711 - petrochenkov:globass, r=Kivooeo
...
resolve: Disable an assert that no longer holds
Fixes https://github.com/rust-lang/rust/issues/152606
Fixes https://github.com/rust-lang/rust/issues/152595
2026-02-18 17:29:47 +11:00
Stuart Cook
544462ad8b
Rollup merge of #152474 - sgasho:opt-bisect-limit-mir, r=saethlin
...
Implement opt-bisect-limit for MIR
closes : rust-lang/rust#150910
Enable bisecting MIR optimization passes to enhance debuggability.
discussions on zulip: https://rust-lang.zulipchat.com/#narrow/channel/182449-t-compiler.2Fhelp/topic/MIR.20dump.20the.20pass.20names/with/573219207
### Check it works
#### Sample code
```rust
fn abs(num: isize) -> usize {
if num < 0 { -num as usize } else { num as usize }
}
fn main() {
println!("{}", abs(-10));
}
```
#### Output
```shell
rustc +mir -Zmir-opt-bisect-limit=30 src/main.rs
BISECT: running pass (1) CheckAlignment on main[89d5]::main
BISECT: running pass (2) CheckNull on main[89d5]::main
BISECT: running pass (3) CheckEnums on main[89d5]::main
BISECT: running pass (4) LowerSliceLenCalls on main[89d5]::main
BISECT: running pass (5) InstSimplify-before-inline on main[89d5]::main
BISECT: running pass (6) ForceInline on main[89d5]::main
BISECT: running pass (7) RemoveStorageMarkers on main[89d5]::main
BISECT: running pass (8) RemoveZsts on main[89d5]::main
BISECT: running pass (9) RemoveUnneededDrops on main[89d5]::main
BISECT: running pass (10) UnreachableEnumBranching on main[89d5]::main
BISECT: running pass (11) SimplifyCfg-after-unreachable-enum-branching on main[89d5]::main
BISECT: running pass (12) InstSimplify-after-simplifycfg on main[89d5]::main
BISECT: running pass (13) SimplifyConstCondition-after-inst-simplify on main[89d5]::main
BISECT: running pass (14) SimplifyLocals-before-const-prop on main[89d5]::main
BISECT: running pass (15) SimplifyLocals-after-value-numbering on main[89d5]::main
BISECT: running pass (16) MatchBranchSimplification on main[89d5]::main
BISECT: running pass (17) SingleUseConsts on main[89d5]::main
BISECT: running pass (18) SimplifyConstCondition-after-const-prop on main[89d5]::main
BISECT: running pass (19) SimplifyConstCondition-final on main[89d5]::main
BISECT: running pass (20) RemoveNoopLandingPads on main[89d5]::main
BISECT: running pass (21) SimplifyCfg-final on main[89d5]::main
BISECT: running pass (22) CopyProp on main[89d5]::main
BISECT: running pass (23) SimplifyLocals-final on main[89d5]::main
BISECT: running pass (24) AddCallGuards on main[89d5]::main
BISECT: running pass (25) PreCodegen on main[89d5]::main
BISECT: running pass (26) CheckAlignment on main[89d5]::abs
BISECT: running pass (27) CheckNull on main[89d5]::abs
BISECT: running pass (28) CheckEnums on main[89d5]::abs
BISECT: running pass (29) LowerSliceLenCalls on main[89d5]::abs
BISECT: running pass (30) InstSimplify-before-inline on main[89d5]::abs
BISECT: NOT running pass (31) ForceInline on main[89d5]::abs
BISECT: NOT running pass (32) RemoveStorageMarkers on main[89d5]::abs
BISECT: NOT running pass (33) RemoveZsts on main[89d5]::abs
BISECT: NOT running pass (34) RemoveUnneededDrops on main[89d5]::abs
BISECT: NOT running pass (35) UnreachableEnumBranching on main[89d5]::abs
BISECT: NOT running pass (36) SimplifyCfg-after-unreachable-enum-branching on main[89d5]::abs
BISECT: NOT running pass (37) InstSimplify-after-simplifycfg on main[89d5]::abs
BISECT: NOT running pass (38) SimplifyConstCondition-after-inst-simplify on main[89d5]::abs
BISECT: NOT running pass (39) SimplifyLocals-before-const-prop on main[89d5]::abs
BISECT: NOT running pass (40) SimplifyLocals-after-value-numbering on main[89d5]::abs
BISECT: NOT running pass (41) MatchBranchSimplification on main[89d5]::abs
BISECT: NOT running pass (42) SingleUseConsts on main[89d5]::abs
BISECT: NOT running pass (43) SimplifyConstCondition-after-const-prop on main[89d5]::abs
BISECT: NOT running pass (44) SimplifyConstCondition-final on main[89d5]::abs
BISECT: NOT running pass (45) RemoveNoopLandingPads on main[89d5]::abs
BISECT: NOT running pass (46) SimplifyCfg-final on main[89d5]::abs
BISECT: NOT running pass (47) CopyProp on main[89d5]::abs
BISECT: NOT running pass (48) SimplifyLocals-final on main[89d5]::abs
BISECT: NOT running pass (49) AddCallGuards on main[89d5]::abs
BISECT: NOT running pass (50) PreCodegen on main[89d5]::abs
```
r? @saethlin
2026-02-18 17:29:46 +11:00
Stuart Cook
a544b5df98
Rollup merge of #151530 - reddevilmidzy:e0106, r=fee1-dead
...
Fix invalid `mut T` suggestion for `&mut T` in missing lifetime error
close : rust-lang/rust#150077
When suggesting to return an owned value instead of a borrowed one, the diagnostic was only removing `&` instead of `&mut `, resulting in invalid syntax like `mut T`. This PR fixes the span calculation to properly cover the entire `&mut ` prefix.
2026-02-18 17:29:45 +11:00