Repository navigation
Rollup of 14 pull requests - #165002
Rollup of 14 pull requests#165002
Conversation
These tests expect generated asm based on assumed target CPU, but some Linux distros use a different CPU baseline, causing a false positive.
The commit with the fix is ee135be, and is associated with the PR: rust-lang#154991 Closes rust-lang#153357 Closes rust-lang#154536
Suggestion from @lsunsi in the PR :)
We run into the lang item being defined twice when running stdarch (so, `core_arch`) CI. Move the lang item into `core` proper. We run CI tests for the lang item in the main repo, so we should not touch it in stdarch anyway. This core definition is transparently wrapped in core_arch, so the methods and docs all remain there.
…pe being returned
```
error: lifetime may not live long enough
--> $DIR/return-expr-with-implicit-trait-object-static-obligation.rs:11:24
|
LL | pub fn new(string: &str) -> Self {
| - let's call the lifetime of this reference `'1`
LL | Thing {
LL | chars: Box::new(string.chars()),
| ^^^^^^^^^^^^^^^^^^^^^^^^ coercion requires that `'1` must outlive `'static`
|
note: this trait object introduces an implicit `'static` obligation
--> $DIR/return-expr-with-implicit-trait-object-static-obligation.rs:5:20
|
LL | pub struct Thing {
LL | chars: Box<dyn Iterator<Item = char>>,
| ^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider introducing an explicit lifetime
|
LL ~ pub struct Thing<'a> {
LL ~ chars: Box<dyn Iterator<Item = char> + 'a>,
|
```
…nd add test for multiple `dyn Trait`s
```
error: lifetime may not live long enough
--> $DIR/return-expr-with-implicit-trait-object-static-obligation.rs:126:25
|
LL | pub fn new(string: &str) -> Self {
| - let's call the lifetime of this reference `'1`
LL | Thing {
LL | chars: (Box::new(string.chars()), Box::new(string.chars())),
| ^^^^^^^^^^^^^^^^^^^^^^^^ coercion requires that `'1` must outlive `'static`
|
note: these `dyn Trait`s introduce an implicit `'static` obligation
--> $DIR/return-expr-with-implicit-trait-object-static-obligation.rs:120:21
|
LL | pub struct Thing {
LL | chars: (Box<dyn Iterator<Item = char>>, Box<dyn Iterator<Item = char>>),
| ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider introducing an explicit lifetime
|
LL ~ pub struct Thing<'a> {
LL ~ chars: (Box<dyn Iterator<Item = char> + 'a>, Box<dyn Iterator<Item = char> + 'a>),
|
```
```
error: lifetime may not live long enough
--> $DIR/return-expr-with-implicit-trait-object-static-obligation.rs:24:13
|
LL | impl Thing<'_> {
| -- lifetime `'2` introduced here
LL | pub fn new(string: &str) -> Self {
| - ---- return type is `b::Thing<'2>`
| |
| let's call the lifetime of this reference `'1`
LL | / Thing {
LL | | chars: Box::new(string.chars()),
LL | | }
| |_____________^ associated function was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
```
```
error: lifetime may not live long enough
--> $DIR/issue-52742.rs:12:9
|
LL | impl Foo<'_, '_> {
| -- lifetime `'2` introduced here
LL | fn take_bar(&mut self, b: Bar<'_>) {
| --------- - -- lifetime `'1` introduced here
| | |
| | has type `Bar<'1>`
| has type `&mut Foo<'_, '2>`
LL | self.y = b.z
| ^^^^^^^^^^^^ assignment requires that `'1` must outlive `'2`
```
When encountering a type mismatch in arguments of a call expr of an associated function, point not only at the `trait` but also the `impl`.
```
error[E0308]: mismatched types
--> tests/ui/fn_traits/point-at-impl-in-call-argument-type-error.rs:9:21
|
9 | let b = B::from(a); //~ ERROR: mismatched types
| ------- ^ expected `B`, found `A`
| |
| arguments to this function are incorrect
|
note: associated function defined here
--> library/core/src/convert/mod.rs:594:8
|
588 | pub const trait From<T>: Sized {
...
594 | fn from(value: T) -> Self;
| ^^^^
note: associated function provided through this `impl`
--> library/core/src/convert/mod.rs:787:1
|
787 | const impl<T> From<T> for T {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
```
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
…functions calling lower_attrs() Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Switch from `insta` to `expect-test` in bootstrap While I like `insta` a bit more for snapshot tests, it has a disadvantage that it requires installing a separate binary (`cargo insta`) for blessing *inline* snapshot tests. That is not very intuitive for people who need to bless inline bootstrap snapshots, and then realize that `x test bootstrap --bless` does nothing. This PR switches from `insta` to `expect-test`, which allows updating inline snapshots via an environment variable while running `cargo test`, without requiring a separate binary. `expect-test` is a `rust-lang` (well, `rust-analyzer`) [repository](https://github.com/rust-analyzer/expect-test), so we should be good there, and it even removes two `dev` dependencies from bootstrap. Changing the inline snapshots was a bit non-trivial to do with a regex (at least in my IDE) because we have to switch the argument order, which is not that simple across multiple lines. So I decided to try https://github.com/ast-grep/ast-grep. I used an LLM to propose the initial rewrite rule, and then modified it slightly and ran `ast-grep` to update the code. The applied rule was this: ```yaml id: insta-to-expect-test language: rust rule: pattern: insta::assert_snapshot!($$$ARGS) transform: LHS: replace: source: $$$ARGS replace: '(?s)^(?<lhs>.*?),\s*@(?<rhs>.*?)\s*,?\s*$' by: '${lhs}' RHS: replace: source: $$$ARGS replace: '(?s)^(?<lhs>.*?),\s*@(?<rhs>.*?)\s*,?\s*$' by: '${rhs}' fix: expect_test::expect![[$RHS]].assert_eq(&$LHS) ``` You can test it in the `ast-grep` [playground](https://ast-grep.github.io/playground.html#eyJtb2RlIjoiQ29uZmlnIiwibGFuZyI6InJ1c3QiLCJxdWVyeSI6IiIsInJld3JpdGUiOiJzb3VyY2U6ICQkJEFSR1NcbnJlcGxhY2U6ICcoP3MpXig/PGxocz4uKj8pLFxccypAKD88cmhzPi4qPylcXHMqLD9cXHMqJCdcbmJ5OiAnJHtyaHN9JyIsInN0cmljdG5lc3MiOiJzbWFydCIsInNlbGVjdG9yIjoiIiwiY29uZmlnIjoiaWQ6IGluc3RhLXRvLWV4cGVjdC10ZXN0XG5sYW5ndWFnZTogcnVzdFxucnVsZTpcbiAgcGF0dGVybjogaW5zdGE6OmFzc2VydF9zbmFwc2hvdCEoJCQkQVJHUylcbnRyYW5zZm9ybTpcbiAgTEhTOlxuICAgIHJlcGxhY2U6XG4gICAgICBzb3VyY2U6ICQkJEFSR1NcbiAgICAgIHJlcGxhY2U6ICcoP3MpXig/PGxocz4uKj8pLFxccypAKD88cmhzPi4qPylcXHMqLD9cXHMqJCdcbiAgICAgIGJ5OiAnJHtsaHN9J1xuICBSSFM6XG4gICAgcmVwbGFjZTpcbiAgICAgIHNvdXJjZTogJCQkQVJHU1xuICAgICAgcmVwbGFjZTogJyg/cyleKD88bGhzPi4qPyksXFxzKkAoPzxyaHM+Lio/KVxccyosP1xccyokJ1xuICAgICAgYnk6ICcke3Joc30nXG5maXg6IGV4cGVjdF90ZXN0OjpleHBlY3QhWyRSSFNdLmFzc2VydF9lcSgmJExIUykiLCJzb3VyY2UiOiJpbnN0YTo6YXNzZXJ0X3NuYXBzaG90IShcbiAgICAgICAgICAgIGN0eC5jb25maWcoXCJidWlsZFwiKVxuICAgICAgICAgICAgICAgIC5yZW5kZXJfc3RlcHMoKSwgQHJcIlxuICAgICAgICBbYnVpbGRdIGxsdm0gPGhvc3Q+XG4gICAgICAgIFtidWlsZF0gcnVzdGMgMCA8aG9zdD4gLT4gcnVzdGMgMSA8aG9zdD5cbiAgICAgICAgW2J1aWxkXSBydXN0YyAxIDxob3N0PiAtPiBzdGQgMSA8aG9zdD5cbiAgICAgICAgW2J1aWxkXSBydXN0ZG9jIDEgPGhvc3Q+XG4gICAgICAgIFwiLFxuICAgICAgICApOyJ9). I used double brackets because it formatted better (IMO) with `x fmt`. Most of the diff comes from the this mechanical change. I split it into a separate commit for easier review. I tried to replicate the disk snapshots as closely as possible, by even including the source file path in them, though I think it is not very useful. There are some newline changes in a few tests, I didn't feel like it is worth fixing those. CC @Zalathar I suppose that we should do the same for `citool`, I can send that as a follow-up. Fixes: rust-lang#164837
…w-test, r=nnethercote Add regression tests for rust-lang#156380 Adds two ui tests in `tests/ui/reborrow` for the two snippets in rust-lang#156380. The first one (moving a `String` out of a `Reborrow` type twice) was fixed by rust-lang#156784. That PR has its own test but with a different struct, so this adds the exact repro from the issue. The second one (getting two aliasing `&mut i32` through a generic field) had no test. It compiles on nightly-2026-08-28 and errors on nightly-2026-08-29, which points at rust-lang#159103. I checked both by hand: they compile on nightly-2026-05-20 and error on the current nightly, with and without `-Znext-solver`. Fixes rust-lang#156380 Disclaimer - AI was used to explore and get the understanding of the codebase. All the changes and tests are executed and reviewed by me personally. Thansk
…eywiser Add codegen test for power of two implying nonzero with debuginfo Fixes rust-lang#137359 Fixed by the LLVM 23 update
Rollup of 14 pull requests try-job: dist-various-1 try-job: test-various try-job: test-x86_64-gnu-aux try-job: test-x86_64-msvc-1 try-job: test-aarch64-apple-1 try-job: test-aarch64-apple-2 try-job: test-x86_64-mingw-1 try-job: test-i686-msvc try-job: test-armhf-gnu try-job: test-x86_64-gnu-llvm-22-3
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
What is this?This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.Comparing 846e51f (parent) -> 16d1ffa (this PR) Test differencesShow 75 test diffsStage 1
Stage 2
Additionally, 35 doctest diffs were found. These are ignored, as they are noisy. Job group index
Test dashboardRun cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard 16d1ffac17ad8b739e32483ac2e65fe7e1804977 --output-dir test-dashboardAnd then open Job duration changes
How to interpret the job duration changes?Job durations can vary a lot, based on the actual runner instance |
|
Finished benchmarking commit (16d1ffa): comparison URL. Overall result: no relevant changes - no action needed@rustbot label: -perf-regression Instruction countThis perf run didn't have relevant results for this metric. Max RSS (memory usage)Results (primary 0.6%, secondary 1.5%)A less reliable metric. May be of interest, but not used to determine the overall result above.
CyclesResults (primary 0.1%, secondary -1.9%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Binary sizeResults (secondary -0.0%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Bootstrap: 489.496s -> 488.102s (-0.28%) |
|
📌 Perf builds for each rolled up PR:
parent commit: 846e51f66b In the case of a perf regression, run the following command with the SHAs of each PR you suspect might be the cause: |
Successful merges:
recover_missing_dot#164985 (Only recover if we may forrecover_missing_dot)ppcf128lang item tocore::num::imp#164692 (moveppcf128lang item tocore::num::imp)implthrough which associated function is provided #164702 (Point atimplthrough which associated function is provided)'staticlifetime in field type being returned #164776 (Account for trait object with implicit'staticlifetime in field type being returned)instatoexpect-testin bootstrap #164856 (Switch frominstatoexpect-testin bootstrap)Reborrowunsoundness due to not checking forCopy#156380)r? @ghost
Create a similar rollup