Skip to content

Conversation

@matthiaskrgr
Copy link
Member

@matthiaskrgr matthiaskrgr commented Nov 2, 2025

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

tshepang and others added 21 commits September 29, 2025 15:17
The tcx.parent tree appears to be correct now.
They need an extra branch for the newtype.
After bors merges a PR, a message may be posted from the CI onto the PR
comment thread directing the user to use the following commands to look
at the test differences:

```
cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard [SOMEID] --output-dir test-dashboard
open test-dashboard/index.html
```

This command creates the `.citool-cache` and `test-dashboard`
directories, whose contents should not enter the repository and can be
ignored by `git`.
"running analysis passes on this crate" -> "running analysis passes on crate `foo`"

This message is displayed in cycle errors in particular, and in some cases without any spans or any other identifiable information to determine which dependency introduced the cycle.
This test suffers from multiple issues that make it very, very difficult
to fix, and even if fixed, it would still be too fragile.

For some background context, this test tries to check that the
optimization introduced in [PR-78122] is not regressed. The optimization
is for eliding `usize` formatting machinery and padding code from the
final binary.

Previously, writing any `fmt::Arguments` would cause the `usize`
formatting and padding machinery to be included in the final binary
since indexing used in `fmt::write` generates code using
`panic_bounds_check` (that prints the index and length). Those bounds
check are never hit, since `fmt::Arguments` never contain any
out-of-bounds indicies.

The `Makefile` version of `fmt-write-bloat` was ported to the present
`rmake.rs` test infra in [PR-128147]. However, this PR just tries to
maintain the original test logic.

The original test, it turns out, already have multiple limitations:

- It only runs on non-Windows, since the `no_std` test of the original
  version tries to link against a `libc`. [PR-128807] worked around this
  by using a substitute name. We re-enabled this test in [PR-142841],
  but it turns out the assertions are too weak, it will even vacuously
  pass for no symbols at all.
- In [PR-143669], we tried to make this test more robust by comparing
  the set of expected versus unexpected panic-related symbols, subject
  to if std was built with debug assertions.

However, in working on [PR-143669], we've come to realize that this test
is fundamentally very fragile:

- The set of panic symbols depend on whether the standard library was
  built with or without debug assertions.
- Different platforms often have different sets of panic
  machinery modules, functions and paths, and thus different sets of
  panic symbols. For instance, x86_64 msvc and i686 msvc have different
  panic codepaths.
- This comes back to the way the test is trying to gauge the absence of
  panic symbols -- it tries to look for symbol substring matches for
  "known" panic symbols. This is fundamentally fragile, because the test
  is trying to peek into the symbols of the resultant binary
  post-linking, based on fuzzy matches (the symbols are mangled as
  well).

Based on this assessment, we determined that we should remove this test.
This is not intended to exclude the possibility of reintroducing a more
robust version of this test. For instance, we could consider some kind
of more controllable post-link "end product" integration codegen test
suite.

[PR-78122]: rust-lang#78122
[PR-128147]: rust-lang#128147
[PR-128807]: rust-lang#128807
[PR-142841]: rust-lang#142841
[PR-143669]: rust-lang#143669
Mention crate being analyzed in query description

"running analysis passes on this crate" -> "running analysis passes on crate `foo`"

This message is displayed in cycle errors in particular, and in some cases without any spans or any other identifiable information to determine which dependency introduced the cycle.

Address rust-lang#74380, but we still need a test for that case in particular.
arm-linux.md: various fixes/improvements
…t-dashboard, r=jieyouxu,kobzol

Ignore test-dashboard related files

After bors merge a PR, a message may be posted from the CI onto the PR comment thread directing the user to use the following commands to look at the test differences:

```
cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard [SOMEID] --output-dir test-dashboard
open test-dashboard/index.html
```

This command creates the `.citool-cache` and `test-dashboard` directories, whose contents should not enter the repository and can be ignored by `git`.
…r=joboet

Implement `strip_circumfix` lib feature

Tracking issue: rust-lang#147946
…thanBrouwer

Change cfg_trace, cfg_attr_trace symbol values

For debugging - I ran into this working on `cfg` stuff in Clippy where I didn't notice the value was wrapped in `<>`, adding `_trace` makes it easier to spot
dangling ptr lint cleanup

This cleans up the dangling_pointers_from_locals lint.
…=ChrisDenton

Remove `tests/run-make/fmt-write-bloat/`

This test suffers from multiple issues that make it very, very difficult to fix, and even if fixed, it would still be too fragile. So this PR removes `tests/run-make/fmt-write-bloat/`.

This PR supersedes rust-lang#143669.

r? `@ChrisDenton` (as you reviewed rust-lang#143669 and have context)

### Background context

For some background context, this test tries to check that the optimization introduced in [PR-78122] is not regressed. The optimization is for eliding `usize` formatting machinery and padding code from the final binary.

Previously, writing any `fmt::Arguments` would cause the `usize` formatting and padding machinery to be included in the final binary since indexing used in `fmt::write` generates code using `panic_bounds_check` (that prints the index and length). Those bounds check are never hit, since `fmt::Arguments` never contain any out-of-bounds indicies.

The `Makefile` version of `fmt-write-bloat` was ported to the present `rmake.rs` test infra in [PR-128147]. However, that PR just tries to maintain the original test logic.

### Limitations and problems

The original test, it turns out, already have multiple limitations:

- It only runs on non-Windows, since the `no_std` test of the original version tries to link against a `libc`. [PR-128807] worked around this by using a substitute name. We re-enabled this test in [PR-142841], but it turns out the assertions are too weak, it will even vacuously pass for no symbols at all.
- In [PR-143669], we tried to make this test more robust by comparing the set of expected versus unexpected panic-related symbols, subject to if std was built with debug assertions.

However, in working on [PR-143669], we've come to realize that this test is fundamentally very fragile:

- The set of panic symbols depend on whether the standard library was built with or without debug assertions.
- Different platforms often have different sets of panic machinery modules, functions and paths, and thus different sets of panic symbols. For instance, x86_64 msvc and i686 msvc have different panic code paths.
- This comes back to the way the test is trying to gauge the absence of panic symbols -- it tries to look for symbol substring matches for "known" panic symbols. This is fundamentally fragile, because the test is trying to peek into the symbols of the resultant binary post-linking, based on fuzzy matches (the symbols are mangled as well).

Based on this assessment, we determined that we should remove this test. This is not intended to exclude the possibility of reintroducing a more robust version of this test. For instance, we could consider some kind of more controllable post-link "end product" integration codegen test suite.

[PR-78122]: rust-lang#78122
[PR-128147]: rust-lang#128147
[PR-128807]: rust-lang#128807
[PR-142841]: rust-lang#142841
[PR-143669]: rust-lang#143669
Better warning message for crate type unsupported by codegen backend

Turns out cargo doesn't hard code the "for target" part of the message after all.
@rustbot rustbot added A-run-make Area: port run-make Makefiles to rmake.rs S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Nov 2, 2025
@matthiaskrgr
Copy link
Member Author

@bors r+ rollup=never p=5

@bors
Copy link
Collaborator

bors commented Nov 2, 2025

📌 Commit 1f4086b has been approved by matthiaskrgr

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 2, 2025
@matthiaskrgr
Copy link
Member Author

matthiaskrgr commented Nov 2, 2025

@bors r-
yield #148305

@bors bors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Nov 2, 2025
@matthiaskrgr
Copy link
Member Author

@bors r+

@bors
Copy link
Collaborator

bors commented Nov 2, 2025

📌 Commit 1f4086b has been approved by matthiaskrgr

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Nov 2, 2025
@bors
Copy link
Collaborator

bors commented Nov 2, 2025

⌛ Testing commit 1f4086b with merge 8483293...

@bors
Copy link
Collaborator

bors commented Nov 2, 2025

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing 8483293 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Nov 2, 2025
@bors bors merged commit 8483293 into rust-lang:master Nov 2, 2025
12 checks passed
@rustbot rustbot added this to the 1.93.0 milestone Nov 2, 2025
@rust-timer
Copy link
Collaborator

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#147137 Mention crate being analyzed in query description 0defc2de2b710c10e3d1fc6c17e99803e206c745 (link)
#147155 arm-linux.md: various fixes/improvements 85faa6269b753bfbfff78fa584c0b2272d941c8b (link)
#147642 Miscellaneous const-generics-related fixes 0bf427888c1d1c553c02fe65f147543c9ef7929d (link)
#147806 Ignore test-dashboard related files 66cb3d9dc2bf6e03af5c5662b0f64f205be7296d (link)
#147947 Implement strip_circumfix lib feature 44c96e88763ed2ed848b969e885ab156cd026bdd (link)
#148346 Change cfg_trace, cfg_attr_trace symbol values f01ac44305ddddd1e330cb08ab60c4573f0f2e97 (link)
#148348 dangling ptr lint cleanup 9ebb0c3a507cd1b78d3d109587ec99a6ba88ea78 (link)
#148393 Remove tests/run-make/fmt-write-bloat/ ff83676e8f876b8618ed027bbbffa0a2ac14753a (link)
#148400 Better warning message for crate type unsupported by codege… 1feff6c2eb9f39521b05a7a147725c294d11e0b1 (link)

previous master: 6a884ad1b5

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions
Copy link
Contributor

github-actions bot commented Nov 2, 2025

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 6a884ad (parent) -> 8483293 (this PR)

Test differences

Show 659 test diffs

Stage 0

  • errors::verify_session_failed_to_create_profiler_50: pass -> [missing] (J1)
  • errors::verify_session_failed_to_create_profiler_51: [missing] -> pass (J1)
  • errors::verify_session_function_return_requires_x86_or_x86_64_44: pass -> [missing] (J1)
  • errors::verify_session_function_return_requires_x86_or_x86_64_45: [missing] -> pass (J1)
  • errors::verify_session_function_return_thunk_extern_requires_non_large_code_model_45: pass -> [missing] (J1)
  • errors::verify_session_function_return_thunk_extern_requires_non_large_code_model_46: [missing] -> pass (J1)
  • errors::verify_session_incompatible_linker_flavor_43: pass -> [missing] (J1)
  • errors::verify_session_incompatible_linker_flavor_44: [missing] -> pass (J1)
  • errors::verify_session_indirect_branch_cs_prefix_requires_x86_or_x86_64_46: pass -> [missing] (J1)
  • errors::verify_session_indirect_branch_cs_prefix_requires_x86_or_x86_64_47: [missing] -> pass (J1)
  • errors::verify_session_soft_float_deprecated_52: pass -> [missing] (J1)
  • errors::verify_session_soft_float_deprecated_53: [missing] -> pass (J1)
  • errors::verify_session_soft_float_ignored_51: pass -> [missing] (J1)
  • errors::verify_session_soft_float_ignored_52: [missing] -> pass (J1)
  • errors::verify_session_unexpected_builtin_cfg_53: pass -> [missing] (J1)
  • errors::verify_session_unexpected_builtin_cfg_54: [missing] -> pass (J1)
  • errors::verify_session_unsupported_crate_type_for_codegen_backend_42: [missing] -> pass (J1)
  • errors::verify_session_unsupported_crate_type_for_target_42: pass -> [missing] (J1)
  • errors::verify_session_unsupported_crate_type_for_target_43: [missing] -> pass (J1)
  • errors::verify_session_unsupported_reg_struct_return_arch_49: pass -> [missing] (J1)
  • errors::verify_session_unsupported_reg_struct_return_arch_50: [missing] -> pass (J1)
  • errors::verify_session_unsupported_regparm_47: pass -> [missing] (J1)
  • errors::verify_session_unsupported_regparm_48: [missing] -> pass (J1)
  • errors::verify_session_unsupported_regparm_arch_48: pass -> [missing] (J1)
  • errors::verify_session_unsupported_regparm_arch_49: [missing] -> pass (J1)

Stage 1

  • errors::verify_session_failed_to_create_profiler_50: pass -> [missing] (J0)
  • errors::verify_session_failed_to_create_profiler_51: [missing] -> pass (J0)
  • errors::verify_session_function_return_requires_x86_or_x86_64_44: pass -> [missing] (J0)
  • errors::verify_session_function_return_requires_x86_or_x86_64_45: [missing] -> pass (J0)
  • errors::verify_session_function_return_thunk_extern_requires_non_large_code_model_45: pass -> [missing] (J0)
  • errors::verify_session_function_return_thunk_extern_requires_non_large_code_model_46: [missing] -> pass (J0)
  • errors::verify_session_incompatible_linker_flavor_43: pass -> [missing] (J0)
  • errors::verify_session_incompatible_linker_flavor_44: [missing] -> pass (J0)
  • errors::verify_session_indirect_branch_cs_prefix_requires_x86_or_x86_64_46: pass -> [missing] (J0)
  • errors::verify_session_indirect_branch_cs_prefix_requires_x86_or_x86_64_47: [missing] -> pass (J0)
  • errors::verify_session_soft_float_deprecated_52: pass -> [missing] (J0)
  • errors::verify_session_soft_float_deprecated_53: [missing] -> pass (J0)
  • errors::verify_session_soft_float_ignored_51: pass -> [missing] (J0)
  • errors::verify_session_soft_float_ignored_52: [missing] -> pass (J0)
  • errors::verify_session_unexpected_builtin_cfg_53: pass -> [missing] (J0)
  • errors::verify_session_unexpected_builtin_cfg_54: [missing] -> pass (J0)
  • errors::verify_session_unsupported_crate_type_for_codegen_backend_42: [missing] -> pass (J0)
  • errors::verify_session_unsupported_crate_type_for_target_42: pass -> [missing] (J0)
  • errors::verify_session_unsupported_crate_type_for_target_43: [missing] -> pass (J0)
  • errors::verify_session_unsupported_reg_struct_return_arch_49: pass -> [missing] (J0)
  • errors::verify_session_unsupported_reg_struct_return_arch_50: [missing] -> pass (J0)
  • errors::verify_session_unsupported_regparm_47: pass -> [missing] (J0)
  • errors::verify_session_unsupported_regparm_48: [missing] -> pass (J0)
  • errors::verify_session_unsupported_regparm_arch_48: pass -> [missing] (J0)
  • errors::verify_session_unsupported_regparm_arch_49: [missing] -> pass (J0)
  • [crashes] tests/crashes/129209.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/131295.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/139738.rs: pass -> [missing] (J1)
  • [run-make] tests/run-make/fmt-write-bloat: pass -> [missing] (J1)
  • [ui] tests/ui/const-generics/parent_generics_of_nested_in_default.rs: [missing] -> pass (J1)

Stage 2

  • [crashes] tests/crashes/129209.rs: pass -> [missing] (J2)
  • [crashes] tests/crashes/131295.rs: pass -> [missing] (J2)
  • [crashes] tests/crashes/139738.rs: pass -> [missing] (J2)
  • [ui] tests/ui/const-generics/parent_generics_of_nested_in_default.rs: [missing] -> pass (J3)
  • [run-make] tests/run-make/fmt-write-bloat: pass -> [missing] (J4)
  • [run-make] tests/run-make/fmt-write-bloat: ignore (ignored when cross-compiling) -> [missing] (J5)

Additionally, 598 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard 8483293b3b4eb209e8e8bd0d069e61de790018a8 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 9396.8s -> 6048.3s (-35.6%)
  2. i686-gnu-2: 5160.4s -> 6249.0s (+21.1%)
  3. x86_64-rust-for-linux: 2618.4s -> 3099.3s (+18.4%)
  4. x86_64-gnu-miri: 4338.1s -> 5000.2s (+15.3%)
  5. x86_64-gnu-tools: 3295.5s -> 3794.2s (+15.1%)
  6. pr-check-2: 2345.7s -> 2631.0s (+12.2%)
  7. i686-gnu-1: 7519.3s -> 8360.1s (+11.2%)
  8. aarch64-gnu-llvm-20-2: 2269.0s -> 2503.0s (+10.3%)
  9. x86_64-gnu-gcc: 3166.4s -> 3477.6s (+9.8%)
  10. x86_64-gnu-llvm-20-2: 5706.4s -> 6264.4s (+9.8%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (8483293): comparison URL.

Overall result: ❌ regressions - no action needed

@rustbot label: -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
0.1% [0.1%, 0.1%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Max RSS (memory usage)

This benchmark run did not return any relevant results for this metric.

Cycles

Results (primary -3.2%, secondary -5.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-3.2% [-3.2%, -3.2%] 1
Improvements ✅
(secondary)
-5.0% [-5.0%, -5.0%] 1
All ❌✅ (primary) -3.2% [-3.2%, -3.2%] 1

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 474.95s -> 473.503s (-0.30%)
Artifact size: 390.84 MiB -> 390.87 MiB (0.01%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-run-make Area: port run-make Makefiles to rmake.rs merged-by-bors This PR was explicitly merged by bors. rollup A PR which is a rollup S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.