Skip to content

Conversation

@Jamesbarford
Copy link
Contributor

@Jamesbarford Jamesbarford commented Dec 2, 2025

r? ghost

Couple of issues I've encountered;

  • compiler/rustc_infer/src/infer/region_constraints/mod.rs GenericKind I can't call write!(f, "{p}") due to error 1. Which looks like I may need to implement Lift for Placeholder?
  • Using the define_print_and_forward_display! for ty::PlaceholderType caused error 2, as I've moved the struct it no longer exists in the crate. I suspect because I'm not using that macro it causes the error for GenericKind
Error 1
error: lifetime may not live long enough
   --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:672:38
    |
668 | impl<'tcx> fmt::Display for GenericKind<'tcx> {
    |      ---- lifetime `'tcx` defined here
...
672 |             GenericKind::Placeholder(ref p) => write!(f, "{p}"),
    |                                      ^^^^^ assignment requires that `'tcx` must outlive `'static`
    |
    = note: requirement occurs because of the type `rustc_middle::ty::TyCtxt<'_>`, which makes the generic argument `'_` invariant
    = note: the struct `rustc_middle::ty::TyCtxt<'tcx>` is invariant over the parameter `'tcx`
    = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance

error: implementation of `Lift` is not general enough
   --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:672:38
    |
672 |             GenericKind::Placeholder(ref p) => write!(f, "{p}"),
    |                                      ^^^^^ implementation of `Lift` is not general enough
    |
    = note: `Lift<rustc_middle::ty::TyCtxt<'0>>` would have to be implemented for the type `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>`, for any lifetime `'0`...
    = note: ...but `Lift<rustc_middle::ty::TyCtxt<'1>>` is actually implemented for the type `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'1>, BoundTy>`, for some specific lifetime `'1`

error: implementation of `Print` is not general enough
   --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:672:38
    |
672 |             GenericKind::Placeholder(ref p) => write!(f, "{p}"),
    |                                      ^^^^^ implementation of `Print` is not general enough
Error 2
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
    --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38
     |
3057 | / macro_rules! forward_display_to_print {
3058 | |     ($($ty:ty),+) => {
3059 | |         // Some of the $ty arguments may not actually use 'tcx
3060 | |         $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty {
     | |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...    |
3072 | |     };
3073 | | }
     | |_- in this expansion of `forward_display_to_print!`
...
3093 | / forward_display_to_print! {
3094 | |     ty::Region<'tcx>,
3095 | |     Ty<'tcx>,
3096 | |     &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
3097 | |     ty::Const<'tcx>,
3098 | |     &'tcx ty::PlaceholderType<'tcx>
     | |     ------------------------------- `rustc_type_ir::Placeholder` is not defined in the current crate
3099 | | }
     | |_- in this macro invocation
     |
     = note: impl doesn't have any local type before any uncovered type parameters
     = note: for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules
     = note: define and implement a trait or new type instead

error: implementation of `Lift` is not general enough
    --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38
     |
3057 | / macro_rules! forward_display_to_print {
3058 | |     ($($ty:ty),+) => {
3059 | |         // Some of the $ty arguments may not actually use 'tcx
3060 | |         $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty {
     | |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Lift` is not general enough
...    |
3072 | |     };
3073 | | }
     | |_- in this expansion of `forward_display_to_print!`
...
3093 | / forward_display_to_print! {
3094 | |     ty::Region<'tcx>,
3095 | |     Ty<'tcx>,
3096 | |     &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
3097 | |     ty::Const<'tcx>,
3098 | |     &'tcx ty::PlaceholderType<'tcx>
3099 | | }
     | |_- in this macro invocation
     |
     = note: `Lift<context::TyCtxt<'0>>` would have to be implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'tcx>, BoundTy>`, for any lifetime `'0`...
     = note: ...but `Lift<context::TyCtxt<'1>>` is actually implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'1>, BoundTy>`, for some specific lifetime `'1`

error: implementation of `print::Print` is not general enough
    --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38
     |
3057 | / macro_rules! forward_display_to_print {
3058 | |     ($($ty:ty),+) => {
3059 | |         // Some of the $ty arguments may not actually use 'tcx
3060 | |         $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty {
     | |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `print::Print` is not general enough
...    |
3072 | |     };
3073 | | }
     | |_- in this expansion of `forward_display_to_print!`
...
3093 | / forward_display_to_print! {
3094 | |     ty::Region<'tcx>,
3095 | |     Ty<'tcx>,
3096 | |     &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
3097 | |     ty::Const<'tcx>,
3098 | |     &'tcx ty::PlaceholderType<'tcx>
3099 | | }
     | |_- in this macro invocation
     |
     = note: `print::Print<'0, print::pretty::FmtPrinter<'a, '0>>` would have to be implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'tcx>, BoundTy>`, for any lifetime `'0`...
     = note: ...but `print::Print<'1, print::pretty::FmtPrinter<'a, 'tcx>>` is actually implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'1>, BoundTy>`, for some specific lifetime `'1`

error: specializing impl repeats parameter `'tcx`
    --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38
     |
3057 | / macro_rules! forward_display_to_print {
3058 | |     ($($ty:ty),+) => {
3059 | |         // Some of the $ty arguments may not actually use 'tcx
3060 | |         $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty {
     | |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...    |
3072 | |     };
3073 | | }
     | |_- in this expansion of `forward_display_to_print!`
...
3093 | / forward_display_to_print! {
3094 | |     ty::Region<'tcx>,
3095 | |     Ty<'tcx>,
3096 | |     &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
3097 | |     ty::Const<'tcx>,
3098 | |     &'tcx ty::PlaceholderType<'tcx>
3099 | | }
     | |_- in this macro invocation

error[E0277]: the trait bound `&Placeholder<TyCtxt<'tcx>, BoundTy>: Lift<...>` is not satisfied
    --> compiler/rustc_middle/src/ty/print/pretty.rs:3064:30
     |
3057 | / macro_rules! forward_display_to_print {
3058 | |     ($($ty:ty),+) => {
3059 | |         // Some of the $ty arguments may not actually use 'tcx
3060 | |         $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty {
...    |
3064 | |                     tcx.lift(*self)
     | |                         ---- ^^^^^ unsatisfied trait bound
     | |                         |
     | |                         required by a bound introduced by this call
...    |
3072 | |     };
3073 | | }
     | |_- in this expansion of `forward_display_to_print!`
...
3093 | / forward_display_to_print! {
3094 | |     ty::Region<'tcx>,
3095 | |     Ty<'tcx>,
3096 | |     &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
3097 | |     ty::Const<'tcx>,
3098 | |     &'tcx ty::PlaceholderType<'tcx>
3099 | | }
     | |_- in this macro invocation
     |
     = help: the trait `Lift<context::TyCtxt<'_>>` is not implemented for `&rustc_type_ir::Placeholder<context::TyCtxt<'tcx>, BoundTy>`
note: required by a bound in `context::TyCtxt::<'tcx>::lift`
    --> compiler/rustc_middle/src/ty/context.rs:1807:20
     |
1807 |     pub fn lift<T: Lift<TyCtxt<'tcx>>>(self, value: T) -> Option<T::Lifted> {
     |                    ^^^^^^^^^^^^^^^^^^ required by this bound in `TyCtxt::<'tcx>::lift`
     = note: the full name for the type has been written to '/home/jambar02/Documents/arm/rust/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-16e5c44041028d8b.long-type-3843651570422266958.txt'
     = note: consider using `--verbose` to print the full type name to the console
help: consider dereferencing here
     |
3064 |                     tcx.lift(**self)
     |                              +

error[E0282]: type annotations needed
    --> compiler/rustc_middle/src/ty/print/pretty.rs:3064:21
     |
3057 | /  macro_rules! forward_display_to_print {
3058 | |      ($($ty:ty),+) => {
3059 | |          // Some of the $ty arguments may not actually use 'tcx
3060 | |          $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty {
...    |
3064 | |/                     tcx.lift(*self)
3065 | ||                         .expect("could not lift for printing")
     | ||______________________________________________________________^ cannot infer type
...    |
3072 | |      };
3073 | |  }
     | |__- in this expansion of `forward_display_to_print!`
...
3093 |  / forward_display_to_print! {
3094 |  |     ty::Region<'tcx>,
3095 |  |     Ty<'tcx>,
3096 |  |     &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
3097 |  |     ty::Const<'tcx>,
3098 |  |     &'tcx ty::PlaceholderType<'tcx>
3099 |  | }
     |  |_- in this macro invocation

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Dec 2, 2025
@rust-log-analyzer

This comment has been minimized.

@Jamesbarford Jamesbarford force-pushed the chore/refactor-struct-placeholder branch 2 times, most recently from e9e240f to 31df95c Compare December 2, 2025 09:21
@rust-log-analyzer

This comment has been minimized.

@lcnr
Copy link
Contributor

lcnr commented Dec 2, 2025

  • compiler/rustc_infer/src/infer/region_constraints/mod.rs GenericKind I can't call write!(f, "{p}") due to error 1. Which looks like I may need to implement Lift for Placeholder?

Using Display should be totally fine here unless the Display impl for Placeholder is wrong 🤔

The IrPrint impl used is

impl<T> rustc_type_ir::ir_print::IrPrint<T> for TyCtxt<'_>
where
    T: Copy + for<'a, 'tcx> Lift<TyCtxt<'tcx>, Lifted: Print<'tcx, FmtPrinter<'a, 'tcx>>>,

Yeah, it's the Lift impl currently in TrivialTypeTraversalAndLiftImpls! for PlaceholderType. You probably have to copy the manual lift impl of Binder

  • Using the define_print_and_forward_display! for ty::PlaceholderType caused error 2, as I've moved the struct it no longer exists in the crate. I suspect because I'm not using that macro it causes the error for GenericKind

Yeah, you should instead only use define_print as we've manually written the forward impl in rustc_type_ir

@Jamesbarford Jamesbarford force-pushed the chore/refactor-struct-placeholder branch from 31df95c to 0097b2b Compare December 3, 2025 08:24
@rust-log-analyzer

This comment has been minimized.

@Jamesbarford
Copy link
Contributor Author

Jamesbarford commented Dec 3, 2025

After implementing Lift<...> I get the following error;

error[E0277]: `&rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>` doesn't implement `std::fmt::Display`
   --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:672:59
    |
672 |             GenericKind::Placeholder(ref p) => write!(f, "{p}"),
    |                                                -----------^^^--
    |                                                |          |
    |                                                |          `&rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>` cannot be formatted with the default formatter
    |                                                in this macro invocation (#1)
    |
   --> /rustc/3b4dd9bf1410f8da6329baa36ce5e37673cbbd1f/library/core/src/macros/mod.rs:610:1
    |
    = note: in this expansion of `write!` (#1)
   ::: /rustc/3b4dd9bf1410f8da6329baa36ce5e37673cbbd1f/library/core/src/macros/mod.rs:612:24
    |
    = note: in this macro invocation (#2)
   ::: /rustc/3b4dd9bf1410f8da6329baa36ce5e37673cbbd1f/library/core/src/macros/mod.rs:997:5
    |
    = note: in this expansion of `$crate::format_args!` (#2)
    |
    = help: the trait `for<'tcx> Lift<rustc_middle::ty::TyCtxt<'tcx>>` is not implemented for `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>`
    = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
    = help: the following other types implement trait `Lift<I>`:
              `rustc_type_ir::Placeholder<I, T>` implements `Lift<U>`
              `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>` implements `Lift<rustc_middle::ty::TyCtxt<'_>>`
    = note: required for `rustc_middle::ty::TyCtxt<'_>` to implement `IrPrint<rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>>`
    = note: required for `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>` to implement `std::fmt::Display`
    = note: 1 redundant requirement hidden
    = note: required for `&rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>` to implement `std::fmt::Display`

Despite the implementation in ir_print.rs

@rust-log-analyzer

This comment has been minimized.

// tidy-alphabetical-start
crate::ty::ParamTy,
crate::ty::PlaceholderType,
crate::ty::PlaceholderType<'tcx>,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this impl shouldn't exist. It overlaps with the blanket lift impl. We need to impl lift for BoundTy instead

Copy link
Contributor Author

@Jamesbarford Jamesbarford Dec 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting, when I remove crate::ty::PlaceholderType<'tcx> and add crate::tyBoundTy the volume of errors trebles but seems to emanate from;

 Placeholder(ty::PlaceholderType<'tcx>),
    |                   ^^ unsatisfied trait bound

Which is fixed by having crate::ty::PlaceholderType<'tcx> in this list 🤔

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is the unsatisfied trait bound?

PlaceholderType should not be in this list, there's a generic Lift impl for Placeholder we should use here. That impl adds a bound of BoundTy we need to add an impl for instead

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error I get is;

error[E0277]: the trait bound `Placeholder<..., ...>: TypeVisitable<_>` is not satisfied
   --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:128:17
    |
125 |   ..., Clone, PartialEq, Eq, Hash, TypeFoldable, TypeVisitable)]
    |                                                  -------------
    |                                                  |
    |                                                  required by a bound introduced by this call
    |                                                  in this derive macro expansion
...
128 |   ...er(ty::PlaceholderType<'tcx>),
    |         ^^ unsatisfied trait bound
    |
   ::: <location>/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/synstructure-0.13.2/src/macros.rs:95:9
    |
 95 | /         pub fn $derives(
 96 | |             i: $crate::macros::TokenStream
 97 | |         ) -> $crate::macros::TokenStream {
    | |________________________________________- in this expansion of `#[derive(TypeVisitable)]`
    |
    = help: the trait `TypeVisitable<_>` is not implemented for `Placeholder<TyCtxt<'_>, ...>`
    = help: the following other types implement trait `TypeVisitable<I>`:
              `&RawList<(), T>` implements `TypeVisitable<TyCtxt<'tcx>>`
              `&RawList<TypeInfo, ...>` implements `TypeVisitable<TyCtxt<'tcx>>`
              `&[T]` implements `TypeVisitable<I>`
              `()` implements `TypeVisitable<I>`
              `(A, B, C)` implements `TypeVisitable<I>`
              `(T, U)` implements `TypeVisitable<I>`
              `Adjust` implements `TypeVisitable<TyCtxt<'tcx>>`
              `Adjustment<'tcx>` implements `TypeVisitable<TyCtxt<'tcx>>`
            and 254 others
    = note: the full name for the type has been written to '<location>/Documents/arm/rust/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_infer-73d70faa908a1b3c.long-type-1457141661489514723.txt'

To which I thought I'd possibly need to implement TypeVisitable for Placeholder which led to a lot of changes, me getting confused and then halting as the TypeVisitable and TypeVisitor require Binder as an argument for visit_binder(...) which wasn't satisfied by Placeholder

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TypeVisitable doesn't have a visit_binder function, that's TypeVisitor.

You should derive TypeVisitable_Generic for it iirc

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah! That seems to have done it though has led to the next issue which is the same error but for PhantomData;

error[E0277]: the trait bound `PhantomData<fn() -> TyCtxt<'_>>: TypeFoldable<...>` is not satisfied
   --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:128:17
    |
125 |   #[derive(Copy, Clone, PartialEq, Eq, Hash, TypeFoldable, TypeVisitable)]
    |                                              ------------
    |                                              |
    |                                              required by a bound introduced by this call
    |                                              in this derive macro expansion
...
128 |       Placeholder(ty::PlaceholderType<'tcx>),
    |                   ^^ unsatisfied trait bound
    |
   ::: <location>/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/synstructure-0.13.2/src/macros.rs:95:9
    |
 95 | /         pub fn $derives(
 96 | |             i: $crate::macros::TokenStream
 97 | |         ) -> $crate::macros::TokenStream {
    | |________________________________________- in this expansion of `#[derive(TypeFoldable)]`
    |
    = help: the trait `TypeFoldable<rustc_middle::ty::TyCtxt<'_>>` is not implemented for `std::marker::PhantomData<fn() -> rustc_middle::ty::TyCtxt<'_>>`
    = help: the following other types implement trait `TypeFoldable<I>`:
              `&RawList<(), (OpaqueTypeKey<TyCtxt<'tcx>>, ...)>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
              `&'tcx rustc_middle::ty::list::RawList<(), LocalDefId>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
              `&RawList<(), OutlivesPredicate<TyCtxt<'tcx>, ...>>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
              `&RawList<(), ProjectionElem<Local, Ty<'tcx>>>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
              `&RawList<(), GenericArg<'tcx>>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
              `&RawList<(), Pattern<'tcx>>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
              `&RawList<(), Ty<'tcx>>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
              `&RawList<(), Binder<TyCtxt<'tcx>, ...>>` implements `TypeFoldable<rustc_middle::ty::TyCtxt<'tcx>>`
            and 246 others
    = note: required for `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>` to implement `TypeFoldable<rustc_middle::ty::TyCtxt<'_>>`
    = note: the full name for the type has been written to '<location>/Documents/arm/rust/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_infer-73d70faa908a1b3c.long-type-15035837308766043169.txt'
    = note: consider using `--verbose` to print the full type name to the console

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

put #[type_foldable(identity)] and #[type_visitable(skip)] on that field

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rust-log-analyzer

This comment has been minimized.

@Jamesbarford Jamesbarford force-pushed the chore/refactor-struct-placeholder branch from 8116744 to e0c973c Compare December 9, 2025 10:59
mir_def: LocalDefId,
}

const FR: NllRegionVariableOrigin = NllRegionVariableOrigin::FreeRegion;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alternative, add #[feature(generic_const_items)] (if it's not marked as incomplete) and change this to const FR<'tcx>: ...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was not able to do this I got the error; generic const items are experimental

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, the feature is still incomplete, oki, let's keep this change then

@lcnr
Copy link
Contributor

lcnr commented Dec 9, 2025

nit, please slightly squash your commits, then r=me 😊

@Jamesbarford Jamesbarford force-pushed the chore/refactor-struct-placeholder branch from e0c973c to 1986be2 Compare December 9, 2025 13:44
@Jamesbarford
Copy link
Contributor Author

@bors r=lcnr

@bors
Copy link
Collaborator

bors commented Dec 9, 2025

@Jamesbarford: 🔑 Insufficient privileges: Not in reviewers

@Jamesbarford Jamesbarford marked this pull request as ready for review December 9, 2025 13:53
@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Dec 9, 2025
@rustbot
Copy link
Collaborator

rustbot commented Dec 9, 2025

changes to the core type system

cc @compiler-errors, @lcnr

@rustbot rustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Dec 9, 2025
@lcnr
Copy link
Contributor

lcnr commented Dec 10, 2025

@bors r+ rollup=iffy

@bors
Copy link
Collaborator

bors commented Dec 10, 2025

📌 Commit 1986be2 has been approved by lcnr

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 Dec 10, 2025
@bors
Copy link
Collaborator

bors commented Dec 10, 2025

⌛ Testing commit 1986be2 with merge a9ac706...

@bors
Copy link
Collaborator

bors commented Dec 10, 2025

☀️ Test successful - checks-actions
Approved by: lcnr
Pushing a9ac706 to main...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Dec 10, 2025
@bors bors merged commit a9ac706 into rust-lang:main Dec 10, 2025
12 checks passed
@rustbot rustbot added this to the 1.94.0 milestone Dec 10, 2025
@github-actions
Copy link
Contributor

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 198328a (parent) -> a9ac706 (this PR)

Test differences

Show 30 test diffs

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

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard a9ac706b5f79e90d7255e3acc343fffba47cc5ef --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. aarch64-apple: 12314.1s -> 7315.7s (-40.6%)
  2. dist-apple-various: 3762.5s -> 4433.6s (+17.8%)
  3. dist-x86_64-netbsd: 4560.5s -> 5332.7s (+16.9%)
  4. dist-aarch64-msvc: 5515.7s -> 6088.1s (+10.4%)
  5. x86_64-msvc-ext2: 5678.4s -> 6234.3s (+9.8%)
  6. aarch64-gnu-debug: 4740.3s -> 4303.2s (-9.2%)
  7. dist-aarch64-apple: 7705.9s -> 8395.9s (+9.0%)
  8. dist-loongarch64-musl: 5162.7s -> 5618.8s (+8.8%)
  9. dist-x86_64-illumos: 5998.7s -> 5479.0s (-8.7%)
  10. pr-check-1: 1812.1s -> 1968.9s (+8.6%)
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 (a9ac706): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

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

Max RSS (memory usage)

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

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)
-0.8% [-0.8%, -0.8%] 1
Improvements ✅
(secondary)
-3.2% [-3.2%, -3.2%] 1
All ❌✅ (primary) -0.8% [-0.8%, -0.8%] 1

Cycles

Results (secondary 2.7%)

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)
2.7% [2.5%, 3.0%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Binary size

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

Bootstrap: 471.708s -> 474.808s (0.66%)
Artifact size: 389.07 MiB -> 389.04 MiB (-0.01%)

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

Labels

merged-by-bors This PR was explicitly merged by bors. 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants