Commit Graph

325813 Commits

Author SHA1 Message Date
SynapLink f9ddd9fdbb tests: mark import UI tests as check-pass 2026-05-04 19:38:47 +02:00
bors cb40c25f6a Auto merge of #156139 - inq:minimize-reshell-perf, r=lcnr
Short-circuit `calculate_fallback_to_f32` when no float vars

Sharing a small fix.

When no unresolved variable is a `float_vid`, no f32 fallback can apply,
so we can skip `from_float_for_f32_root_vids` (which walks the proof tree
of every pending obligation under the new solver — O(N × M) on crates
with many large obligations).

On ReShell: stage1 wall-clock 2m35s → 1m46s (-49s, ~31%).

Context + profile breakdown will be linked at
rust-lang/trait-system-refactor-initiative#254 after this PR opens.

r? @lcnr
2026-05-04 14:02:18 +00:00
inq 55ff2e1b14 Short-circuit calculate_fallback_to_f32 when no float vars 2026-05-04 16:45:59 +07:00
bors 1d72d7e813 Auto merge of #156134 - jhpratt:rollup-79KaBC4, r=jhpratt
Rollup of 3 pull requests

Successful merges:

 - rust-lang/rust#156120 (Regression test for trait-system-refactor#7)
 - rust-lang/rust#156125 (refactor using ExprParenthesesNeeded where possible)
 - rust-lang/rust#156132 (More lifting tweaks)
2026-05-04 09:31:36 +00:00
Jacob Pratt 037e2b0bb0 Rollup merge of #156132 - nnethercote:more-lifting-tweaks, r=oli-obk
More lifting tweaks

Details in individual commits.

r? @oli-obk
2026-05-04 04:25:25 -04:00
Jacob Pratt 06c89cfdd2 Rollup merge of #156125 - GTimothy:refactor-exprparenthesesneeded, r=ShoyuVanilla
refactor using ExprParenthesesNeeded where possible

Found multiple instances where the equivalent of `ExprParenthesesNeeded` was done 'manually'.
Replaced them with an `ExprParenthesesNeeded::surrounding` call.
2026-05-04 04:25:24 -04:00
Jacob Pratt 19fbc622a6 Rollup merge of #156120 - inq:test-alias-relate-7, r=lcnr
Regression test for trait-system-refactor#7

Adds a regression test for [`AliasRelate` hides info in transitive cases](https://github.com/rust-lang/trait-system-refactor-initiative/issues/7).

The example previously errored under the new solver but compiles cleanly now thanks to eager normalization (post-rust-lang/rust#119106). Verified on both the `old` and `next` revisions.

The issue body has an older TODO suggesting a goal-proving variant test; per lcnr's recent note in `#t-types/trait-system-refactor` ("this isn't an issue as we eagerly normalize"), the underlying mechanism is now resolved across both inference and goal-proving paths, so this single regression test is sufficient. Closing the upstream issue manually after merge.

r? @lcnr
2026-05-04 04:25:24 -04:00
inkyu d4c413e348 Apply suggestion from @lcnr
Co-authored-by: lcnr <rust@lcnr.de>
2026-05-04 15:05:04 +07:00
bors 783062d3c6 Auto merge of #154095 - joboet:vec_clear_truncate, r=nnethercote
std: implement `clear` via `truncate`

This gets rid of some `unsafe`. `truncate(0)` is even documented to be equivalent to `clear`, this makes that equivalence even more obvious.
2026-05-04 06:16:32 +00:00
Nicholas Nethercote 2cf48841f1 Remove silly FmtPrinter<'tcx, 'tcx> instance.
This doesn't match any of the other uses.
2026-05-04 15:50:46 +10:00
Nicholas Nethercote 809fcab63e Shift lift calls outward.
Several printing functions (e.g. `short_string`) take a liftable
parameter. This commit changes the call sites to do the lifting instead.
This simplifies the type signatures and puts the `lift` calls inside
`tls::with` calls which is where they usually appear, and the minor cost
of having more `lift` call sites.
2026-05-04 14:05:16 +10:00
Nicholas Nethercote 67ba480fdb Remove unused 'tcx lifetime from trait Print. 2026-05-04 14:04:55 +10:00
bors a51f3a89b2 Auto merge of #156044 - danieljofficial:move-tests-array-slice-vec, r=JonathanBrouwer
Move tests array slice vec

r? @Kivooeo 
Hi, some tests that belong in the  array-slice-vec folder
2026-05-04 03:00:26 +00:00
GTimothy ed2356a953 refactor using ExprParenthesesNeeded where possible
found multiple instances where the equivalent of ExprParenthesesNeeded
was done 'manually'.
replaced them with a `ExprParenthesesNeeded::surrounding` call
2026-05-04 01:19:01 +02:00
bors 045b17737d Auto merge of #156118 - RalfJung:miri, r=RalfJung
miri subtree update

Subtree update of `miri` to https://github.com/rust-lang/miri/commit/0853747bf78b8b6e314dcdf14ade9c83a6c54f3e.

Created using https://github.com/rust-lang/josh-sync.

r? @ghost
2026-05-03 22:28:16 +00:00
inq 44a7eb01fc Regression test for trait-system-refactor#7 2026-05-04 04:00:57 +07:00
Ralf Jung 7bcb8c1bde Merge pull request #5001 from RalfJung/tid
tid handling: cleanup and unification
2026-05-03 18:04:39 +00:00
bors ad3a598ca4 Auto merge of #156113 - JonathanBrouwer:rollup-yXpNY1L, r=JonathanBrouwer
Rollup of 3 pull requests

Successful merges:

 - rust-lang/rust#153536 (Add `const_param_ty_unchecked` gate)
 - rust-lang/rust#155528 (const-stabilize `char::is_control()`)
 - rust-lang/rust#156086 (VaList::next_arg: track_caller for better Miri errors)
2026-05-03 17:54:12 +00:00
Ralf Jung 64ab20128c tid handling: cleanup and unification 2026-05-03 19:37:55 +02:00
Jonathan Brouwer 06354f4e17 Rollup merge of #156086 - RalfJung:next-arg-miri-errs, r=folkertdev
VaList::next_arg: track_caller for better Miri errors

The test diff should explain why this is better. :)

r? @folkertdev
2026-05-03 19:23:53 +02:00
Jonathan Brouwer b8c24b1d4f Rollup merge of #155528 - Jules-Bertholet:const-is-control, r=folkertdev
const-stabilize `char::is_control()`
2026-05-03 19:23:52 +02:00
Jonathan Brouwer 43fbdfd2f4 Rollup merge of #153536 - zedddie:const-param-ty-unchecked-gate, r=BoxyUwU
Add `const_param_ty_unchecked` gate

Add `const_param_ty_unchecked` internal feature gate to skip `ConstParamTy_` trait enforcement on type. Provides an escape hatch for writing tests and examples that use const generics without needing to ensure all fields implement `ConstParamTy_`.

r? BoxyUwU
2026-05-03 19:23:52 +02:00
bors 818811b3cd Auto merge of #156111 - JonathanBrouwer:rollup-8X18OBD, r=JonathanBrouwer
Rollup of 4 pull requests

Successful merges:

 - rust-lang/rust#156073 ([rustdoc] Fix `doc_cfg` feature on reexports)
 - rust-lang/rust#152216 (Fix 'assign to data in an index of' collection suggestions)
 - rust-lang/rust#155433 (Rip out rustc_layout_scalar_valid_range_* attribute support)
 - rust-lang/rust#156098 (Hand-implement `impl Debug for NumBuffer` to avoid constraining `T` or printing MaybeUninit)
2026-05-03 14:33:52 +00:00
Jonathan Brouwer 0d98c12aa5 Rollup merge of #156098 - joshtriplett:num-buffer-debug, r=GuillaumeGomez
Hand-implement `impl Debug for NumBuffer` to avoid constraining `T` or printing MaybeUninit

The derived implementation requires `T: Debug`, and doesn't need to.
2026-05-03 16:33:23 +02:00
Jonathan Brouwer 081e7c4481 Rollup merge of #155433 - oli-obk:bye-bye-long-attribute, r=RalfJung,ShoyuVanilla
Rip out rustc_layout_scalar_valid_range_* attribute support

And either removes tests for it or replaces the uses with pattern types.

primarily fixes rust-lang/rust#135996

fixes rust-lang/rust#147761
fixes rust-lang/rust#133652
2026-05-03 16:33:22 +02:00
Jonathan Brouwer 11610db252 Rollup merge of #152216 - GTimothy:map-diagnostics-fix, r=JonathanBrouwer
Fix 'assign to data in an index of' collection suggestions

fixes https://github.com/rust-lang/rust/issues/150001
fixes https://github.com/rust-lang/rust-analyzer/issues/16076
fixes https://github.com/rust-lang/rust/issues/134917

The issues are threefold and linked:
 1. Assigning data to a ~~collection~~BTreeMap/HashMap suggests 3 solutions all marked as `MachineApplicable`
 2. The suggestions are slightly wrong with regards to their borrowing needs.
 3. The suggestions are not guaranteed to produce code that is valid, and suggestion number two is equivalent to an update, not an insertion.

This PR:
 - splits the large triple suggestion into three
 - sets them to `MaybeIncorrect`
 - automatically determines the required borrowing to use.

 I think this solution may not be very elegant, expecially the key typechecking / borrowing part, but it works. I am however very open to any improvement/change :)

 edit: edited to replace 'collection' with  BTreeMap/HashMap'
2026-05-03 16:33:21 +02:00
Jonathan Brouwer bc6d9b1aa3 Rollup merge of #156073 - GuillaumeGomez:doc-cfg-reexports, r=Urgau
[rustdoc] Fix `doc_cfg` feature on reexports

Part of rust-lang/rust#150268.

I don't mark the issue as fixed as I need to check the third case described in the issue. First commit comes from https://github.com/rust-lang/rust/pull/156020, will need to rebase this PR once the original is merged.

r? @Urgau
2026-05-03 16:33:20 +02:00
bors 54f67d248b Auto merge of #155996 - flip1995:clippy-subtree-update, r=Manishearth
Clippy subtree update

r? Manishearth
2026-05-03 09:53:02 +00:00
Oli Scherer 11d88ee42b Rip out rustc_layout_scalar_valid_range_* attribute support 2026-05-03 10:59:52 +02:00
Oli Scherer 8882bf04b7 Remove rustc_layout_scalar_valid_range attr from debuginfo 2026-05-03 10:59:52 +02:00
Oli Scherer e397ac2b05 Remove mir-opt mention of rustc_scalar_layout attr 2026-05-03 10:57:27 +02:00
Oli Scherer df112cf8b3 Stop using rustc_scalar_layout in enum test 2026-05-03 10:57:27 +02:00
Oli Scherer 25d0328706 Stop using rustc_scalar_layout attr in jump threading test 2026-05-03 10:57:27 +02:00
Oli Scherer 829084142c Stop using rustc_scalar_layout attr in gvn test 2026-05-03 10:57:27 +02:00
Ralf Jung 85298e9992 Merge pull request #4997 from RalfJung/rustup
Rustup
2026-05-03 08:34:08 +00:00
Ralf Jung f11819ce16 fmt and clippy 2026-05-03 10:08:22 +02:00
Ralf Jung 1cbe0d108f Merge ref '44860d3e9ef7' from rust-lang/rust
Pull recent changes from https://github.com/rust-lang/rust via Josh.

Upstream ref: rust-lang/rust@44860d3e9e
Filtered ref: rust-lang/miri@e4425fbb4f
Upstream diff: https://github.com/rust-lang/rust/compare/a021a7796f66600f46013d6c8d1dfc9e8d7f4a92...44860d3e9ef700cac0b4a61d924f41f46bf1b447

This merge was created using https://github.com/rust-lang/josh-sync.
2026-05-03 10:08:01 +02:00
Ralf Jung b0ca445c76 Prepare for merging from rust-lang/rust
This updates the rust-version file to 44860d3e9e.
2026-05-03 10:03:51 +02:00
bors 6769f690f9 Auto merge of #156097 - jhpratt:rollup-haL7A1y, r=jhpratt
Rollup of 5 pull requests

Successful merges:

 - rust-lang/rust#155666 (Interning cleanups)
 - rust-lang/rust#155940 (refactor rustc_on_unimplemented's filtering)
 - rust-lang/rust#156065 (Remove unused spans from AttributeKind)
 - rust-lang/rust#156079 (Move and rename the `clone-never.rs` test)
 - rust-lang/rust#156091 (change field `tools` on `AttributeParser` to hold `&'tcx RegisteredTools`)
2026-05-03 06:40:27 +00:00
Josh Triplett df8a13ecf4 Hand-implement impl Debug for NumBuffer to avoid constraining T or printing MaybeUninit
The derived implementation requires `T: Debug`, and doesn't need to.
2026-05-02 22:47:13 -07:00
Jacob Pratt bd8d0260ca Rollup merge of #156091 - Bryntet:move-tools, r=JonathanBrouwer
change field `tools` on `AttributeParser` to hold `&'tcx RegisteredTools`

Makes tools actually stored, and not just tool names

this was originally part of rust-lang/rust#155691 but was split out to make that PR smaller.

r? @petrochenkov
cc @JonathanBrouwer
2026-05-03 00:25:34 -04:00
Jacob Pratt 98d754bab8 Rollup merge of #156079 - JonathanBrouwer:clone-never, r=mejrs
Move and rename the `clone-never.rs` test
2026-05-03 00:25:33 -04:00
Jacob Pratt c3afa21a40 Rollup merge of #156065 - mejrs:spanculler, r=JonathanBrouwer
Remove unused spans from AttributeKind

Recently I noticed some spans in diagnostic attributes were never used. I went through and checked the other variants too.
2026-05-03 00:25:33 -04:00
Jacob Pratt b7c65513ba Rollup merge of #155940 - mejrs:filter, r=jdonszelmann
refactor rustc_on_unimplemented's filtering

Previously when you had a
```rust
pub struct Directive {
    pub is_rustc_attr: bool,
    pub condition: Option<OnUnimplementedCondition>,
    pub subcommands: ThinVec<Directive>,
    pub message: Option<(Span, FormatString)>,
    ...
}
```
that condition would control the emission of the message, label, notes etc. I've changed that to
```rust
pub struct Directive {
    pub is_rustc_attr: bool,
    pub filters: ThinVec<(Filter, Directive)>,
    pub message: Option<(Span, FormatString)>,
    ...
```

so that the message etc is always emitted, and there's a vec of tuples with (filter, directive) where the filter controls whether that directive is even emitted,  which i think is much clearer. That also makes it easier to not have to do the reverse iteration thing and this makes it so that notes are emitted in declaration order (with nonfiltered options always last).

The rename is because I plan on making it available to other diagnostic attributes at some point (very wip) so `OnUnimplementedCondition` and the like would have to be renamed anyway.
2026-05-03 00:25:32 -04:00
Jacob Pratt cc82c429f0 Rollup merge of #155666 - nnethercote:interning-cleanups, r=mejrs
Interning cleanups

Details in individual commits.

r? @JohnTitor
2026-05-03 00:25:32 -04:00
bors 44860d3e9e Auto merge of #152277 - gurry:114865-ice-format-args, r=chenyukang
Validate source snippet when format input is raw string



Fixes rust-lang/rust#114865

The issue occurred because the user's proc macro respanned the format arg to an unrelated multi-byte string and we ICE'd by landing in the middle of a multi-byte char.

This PR adds validation that prevents the parser from trying to walk such obviously wrong snippets. Such validation already existed for non-raw strings. This PR adds it for raw strings as well.
2026-05-03 03:24:52 +00:00
Guillaume Gomez ba27564259 Keep the original import DefId when inlining items through multiple reexports 2026-05-03 03:27:09 +02:00
Guillaume Gomez 6f644d8a77 Better use of conditions in propagate_doc_cfg 2026-05-03 03:26:34 +02:00
bors a3e96d8cb8 Auto merge of #155767 - adwinwhite:eager-norm-outside, r=lcnr
`-Znext-solver` Eager normalization outside of solver 




This PR adds a normalization routine for the next solver that behaves the same as the normalization in the old solver.
The new routine is used to normalize eagerly outside of the next solver.

This is [part 2](https://rust-lang.zulipchat.com/#narrow/channel/364551-t-types.2Ftrait-system-refactor/topic/Eager.20normalization.2C.20ahoy.21/near/582996783) of modifying the next solver to support eager normalization.

Those test changes are mostly wording changes, duplicating some errors or reducing some duplicates. But I could have overlooked something.
Notably it fixes the first, third and fourth examples in https://github.com/rust-lang/trait-system-refactor-initiative/issues/191, but not the second variant.

It's probably easier to review commit by commit.

Fixes rust-lang/rust#151308
Fixes rust-lang/rust#101557
Fixes rust-lang/rust#119692
Fixes rust-lang/rust#136859
2026-05-02 20:56:41 +00:00
bors 20de910db4 Auto merge of #154341 - RalfJung:retag-on-typed-copy, r=oli-obk
Make retags an implicit part of typed copies



Ever since Stacked Borrows was first implemented in Miri, that was done with `Retag` statements: given a place (usually a local variable), those statements find all references stored inside the place and refresh their tags to ensure the aliasing requirements are upheld. However, this is a somewhat unsatisfying approach for multiple reasons:
- It leaves open the [question](https://github.com/rust-lang/unsafe-code-guidelines/issues/371) of where to even put `Retag` statements. Over time, the AddRetag pass settled on one possible answer to this, but it wasn't very canonical.
- For assignments of the form `*ptr = expr`, if the assignment involves copying a reference, we probably want to do a retag -- but if we do a `Retag(*ptr)` as the next instruction, it can be non-trivial to argue that this even retags the right value, so we refrained from doing retags in that case. This has [come up](https://github.com/llvm/llvm-project/pull/160913#issuecomment-3341908717) as a potential issue for Rust making better use of LLVM "captures" annotations. (That said, there might be [other ways](https://github.com/rust-lang/unsafe-code-guidelines/issues/593#issuecomment-4328112031) to obtain this desired optimization.)
- Normal compilation avoids generating retags, but we still generate LLVM IR with `noalias`. What does that even mean? How do MIR optimization passes interact with retags? These are questions we have to figure out to make better use of aliasing information, but currently we can't even really ask such questions.

I think we should resolve all that by making retags part of what happens during a typed copy (a concept and interpreter infrastructure that did not exist yet when retags were initially introduced). Under this proposal, when executing a MIR assignment statement, what conceptually happens is as follows:
- We evaluate the LHS to a place.
- We evaluate the RHS to a value. This does a typed load from memory if needed, raising UB if memory does not contain a valid representation of the assignment's type.
- We walk that value, identify all references inside of it, and retag them. If this happens as part of passing a function argument, this is a protecting retag.
- We store (a representation of) the value into the place.

However, this semantics doesn't fully work: there's a mandatory MIR pass that turns expressions like `&mut ***ptr` into intermediate deref's. Those must *not* do any retags. So far this happened because the AddRetag pass did not add retags for assignments to deref temporaries, but that information is not recorded in cross-crate MIR. Therefore I instead added a field to `Rvalue::Use` to indicate whether this value should be retagged or not. A non-retagging copy seems like a sufficiently canonical primitive that we should be able to express it. Dealing with the fallout from that is a large chunk of the overall diff. (I also considered adding this field to `StatementKind::Assign` instead, but decided against that as we only actually need it for `Rvalue::Use`. I am not sure if this was the right call...)

This neatly answers the question of when retags should occur, and handles cases like `*ptr = expr`. It avoids traversing values twice in Miri. It makes codegen's use of `noalias` sound wrt the actual MIR that it is working on. It also gives us a target semantics to evaluate MIR opts against. However, I did not carefully check all MIR opts -- in particular, GVN needs a thorough look under the new semantics; it currently can turn alias-correct code into alias-incorrect code. (But this PR doesn't make things any worse for normal compilation where the retag indicator is anyway ignored.)

Another side-effect of this PR is that `-Zmiri-disable-validation` now also disables alias checking. It'd be nicer to keep them orthogonal but I find this an acceptable price to pay.

- [rustc benchmark results](https://github.com/rust-lang/rust/pull/154341#issuecomment-4125313290)
- [miri benchmark results](https://github.com/rust-lang/rust/pull/154341#issuecomment-4129840926)
2026-05-02 17:42:41 +00:00