Skip to content

implement Move trait prototype#156018

Draft
nia-e wants to merge 2 commits into
rust-lang:mainfrom
nia-e:move-trait
Draft

implement Move trait prototype#156018
nia-e wants to merge 2 commits into
rust-lang:mainfrom
nia-e:move-trait

Conversation

@nia-e

@nia-e nia-e commented Apr 30, 2026

Copy link
Copy Markdown
Member

View all comments

Add a barebones implementation for Move (#149607), pending some diagnostics changes & tests.

TODO

  • next solver currently ICEs when not enabling feature(move_trait)
  • change printing of trait objects to not show Move

r? lcnr

@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. T-libs Relevant to the library team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) labels Apr 30, 2026
@nia-e

nia-e commented Apr 30, 2026

Copy link
Copy Markdown
Member Author

@bors try @rust-timer queue

@rust-timer

This comment was marked as off-topic.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Apr 30, 2026
@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Apr 30, 2026
implement `Move` trait prototype
@nia-e

nia-e commented Apr 30, 2026

Copy link
Copy Markdown
Member Author

(tests are broken, mostly due to diagnostics changing)

@rust-log-analyzer

This comment has been minimized.

@rust-bors

This comment was marked as outdated.

@rust-log-analyzer

This comment has been minimized.

@lcnr

lcnr commented May 1, 2026

Copy link
Copy Markdown
Contributor

the zerovec changes rely on a need candidate preference change 🤔 :3

what i've done in https://github.com/rust-lang/rust/pull/146201/changes#diff-34d5893dd95fe09f9a0fd3341efacd1c21853bb34ba29d9d79bb9af26bb8a0a0

let key = self.infcx.param_env.and(type_op::prove_predicate::ProvePredicate { predicate });
let op = CustomTypeOp::new(
|ocx| {
let res = type_op::QueryTypeOp::perform_locally_with_next_solver(ocx, key, span);

@lcnr lcnr May 1, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

if you look at what perform_locally_with_next_solver, it should just be the thing you do in the error path anyways 🤔 🤷

actually, we could make scrape_region_constraints generic over the expected errors, and have a FallibleCustomTypeOp which uses it while expecting potential errors. Instead instead of always emitting a delayed bug if there are errors, scrape_region_constraints would just report the failures as proper type errors 🤔 that seems nicer to me

View changes since the review

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

right, ok - wasn't sure if that level of overhaul was on the table. it was kind of difficult to recreate the predicate in scrape_region_constraints (thus me doing it this way) but if i can mess with it that makes my life easier :D

Comment thread compiler/rustc_borrowck/src/type_check/mod.rs Outdated
Comment thread compiler/rustc_hir_analysis/src/check/wfcheck.rs Outdated
Comment thread compiler/rustc_hir_analysis/src/hir_ty_lowering/bounds.rs Outdated
let relaxed_bounds = collect_relaxed_bounds(hir_bounds, context);
self.reject_duplicate_relaxed_bounds(relaxed_bounds);

let Some(move_did) = tcx.lang_items().move_trait() else {

@lcnr lcnr May 1, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'd just always require_lang_item :3 requiring core to provide the trait definition for Move seems innocent enough

View changes since the review

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

that's what I tried initially, but it means we need to add Move in a quadrillion tests that don't depend on core 🫠

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

we should have some mini_core somewhere that most such tests should use 😅

are there still proper #[no_core] tests that don't use an existing mini_core?

Comment thread compiler/rustc_hir_analysis/src/hir_ty_lowering/bounds.rs Outdated
}

// Don't use `add_implicit_bounds` directly to skip adding `Sized`.
self.add_implicit_move_bound(

@lcnr lcnr May 1, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

hmm, I'd prefer add_implicit_bound here, because otherwise we have to do that when adding Forget later on

View changes since the review

Comment thread compiler/rustc_middle/src/ty/context.rs Outdated
}

pub fn is_implicit_trait(self, def_id: DefId) -> bool {
self.is_default_trait(def_id) || matches!(self.as_lang_item(def_id), Some(LangItem::Move))

@lcnr lcnr May 1, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

why are we not treating Sized as an implicit trait?

View changes since the review

@nia-e nia-e May 1, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Sized is weird enough (sometimes the bound is Sized, sometimes MetaSized etc) that i thought it made more sense to treat it separately. like, arguably MetaSized should also be an implicit trait but that would change behaviour at most callsites i think.

though i realise this is kinda confusing naming given that I also wrote add_implicit_trait_bounds that does add sized...

}

// Backward compatibility for default auto traits.
// Backward compatibility for default auto traits & `Move`.

@lcnr lcnr May 1, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

this is somewhat meh, Move is a default auto trait 😅 ✨ , just not add default_auto_trait

View changes since the review

@fmease fmease May 1, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

In general, this PR doesn't seem to use the "infrastructure" provided by internal feature more_maybe_bounds unlike earlier experiments.

I lack the context, so I don't know why that's done this way. However, if the "proper" Move and Forget default auto traits won't use all the preexisting MMB lowering routines, then I'd rather remove that internal feature entirely since it's evidently being supplanted (and also won't be needed anymore anyway as its purpose was to experiment with new default bounds).

Maintaining two incredibly similar but still somehow distinct features (default vs. "implicit") is somewhat meh I dare say. We probably want to notify Vadim then who is the owner of MMB IIRC.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

yeah, I agree. Ripping out that feature in favor of actually having individual traits seems good to me. Reusing these features doesn't simplify adding new traits. Having one non-sized trait is nice to properly handle things though

@rust-bors

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@nia-e

nia-e commented May 4, 2026

Copy link
Copy Markdown
Member Author

curious what the perf hit is without doing any special handling. should actually work this time :D

@bors try @rust-timer queue

@rust-timer

This comment was marked as duplicate.

@rust-bors

This comment has been minimized.

@rust-bors rust-bors Bot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jun 6, 2026
@rust-bors

rust-bors Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

💔 Test for 1e6ab13 failed: CI. Failed job:

@rust-log-analyzer

This comment has been minimized.

@rust-bors

This comment has been minimized.

@nia-e

nia-e commented Jun 15, 2026

Copy link
Copy Markdown
Member Author

@bors try

@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jun 15, 2026
implement `Move` trait prototype
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-bors

rust-bors Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: f978b70 (f978b702ceab85a85296570589e22d1c3158537c, parent: 5ff740e85e8569289a93573ad25f1295dfae0323)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (f978b70): comparison URL.

Overall result: ❌✅ regressions and improvements - BENCHMARK(S) FAILED

Benchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf.

Next, please: If you can, justify the regressions found in this try perf run in writing along with @rustbot label: +perf-regression-triaged. If not, fix the regressions and do another perf run. Neutral or positive results will clear the label automatically.

@bors rollup=never
@rustbot label: -S-waiting-on-perf +perf-regression

❗ ❗ ❗ ❗ ❗
Warning ⚠️: The following benchmark(s) failed to build:

  • diesel-2.2.10-new-solver
  • nalgebra-0.33.0-new-solver
  • Job failure

❗ ❗ ❗ ❗ ❗

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)
3.0% [0.2%, 38.6%] 163
Regressions ❌
(secondary)
3.8% [0.1%, 25.5%] 175
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-10.6% [-10.8%, -10.5%] 3
All ❌✅ (primary) 3.0% [0.2%, 38.6%] 163

Max RSS (memory usage)

Results (primary 1.3%, secondary -4.6%)

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

mean range count
Regressions ❌
(primary)
1.5% [0.6%, 3.3%] 15
Regressions ❌
(secondary)
1.8% [1.1%, 3.1%] 12
Improvements ✅
(primary)
-2.3% [-2.3%, -2.3%] 1
Improvements ✅
(secondary)
-30.1% [-33.7%, -26.8%] 3
All ❌✅ (primary) 1.3% [-2.3%, 3.3%] 16

Cycles

Results (primary 4.9%, secondary 5.4%)

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

mean range count
Regressions ❌
(primary)
4.9% [1.9%, 27.6%] 58
Regressions ❌
(secondary)
6.0% [1.2%, 28.3%] 86
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-9.4% [-9.9%, -9.1%] 3
All ❌✅ (primary) 4.9% [1.9%, 27.6%] 58

Binary size

Results (primary 0.3%, secondary 0.4%)

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

mean range count
Regressions ❌
(primary)
0.3% [0.0%, 1.7%] 101
Regressions ❌
(secondary)
0.4% [0.0%, 2.0%] 64
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.3% [0.0%, 1.7%] 101

Bootstrap: 518.77s -> 533.733s (2.88%)
Artifact size: 401.47 MiB -> 401.16 MiB (-0.08%)

@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jun 15, 2026
}
} else if let PlaceContext::NonMutatingUse(NonMutatingUseContext::Move) = context
&& move_tr
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

exhaustive match pls

Some(rustc_hir::LangItem::Move)
)
})
} else {

@lcnr lcnr Jun 16, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

this only filters the param_env if tcx.is_trait(def_id) is true

View changes since the review

hir_bounds: &[hir::GenericBound<'tcx>],
context: ImpliedBoundsContext<'tcx>,
span: Span,
including_sized: bool,

@lcnr lcnr Jun 16, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

please make this a newtype enum

View changes since the review

@rust-bors

This comment has been minimized.

@rust-bors

This comment has been minimized.

@lcnr

lcnr commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

@bors try @rust-timer queue

@rust-timer

Copy link
Copy Markdown
Collaborator

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jul 24, 2026
@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jul 24, 2026
implement `Move` trait prototype
@rust-bors

rust-bors Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

💔 Test for b373540 failed: CI. Failed job:

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

The job pr-check-2 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)

error[E0599]: no variant, associated function, or constant named `Move` found for enum `SolverTraitLangItem` in the current scope
    --> src/tools/rust-analyzer/crates/hir-ty/src/next_solver/interner.rs:1497:13
     |
 875 |             $( $solver_enum::$variant => lang_items.$variant.is_some_and(|it| it == def_id), )*
     |                              -------- due to this macro variable
...
1497 |             Move,
     |             ^^^^ variant, associated function, or constant not found in `SolverTraitLangItem`

error[E0599]: no variant, associated function, or constant named `Move` found for enum `SolverTraitLangItem` in the current scope
    --> src/tools/rust-analyzer/crates/hir-ty/src/next_solver/interner.rs:1560:13
     |
 856 |                 $( $solver_enum::$variant => {} )*
     |                                  -------- due to this macro variable
...
1560 |             Move,
     |             ^^^^ variant, associated function, or constant not found in `SolverTraitLangItem`

[RUSTC-TIMING] build_script_build test:false 0.127

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

The job dist-x86_64-linux-quick failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
##[endgroup]
[2026-07-24T11:50:57.656Z INFO  opt_dist::timer] Section `Stage 1 (Rustc + rustdoc PGO)` starts
[2026-07-24T11:50:57.656Z INFO  opt_dist::timer] Section `Stage 1 (Rustc + rustdoc PGO) > Build PGO instrumented rustc and LLVM` starts
[2026-07-24T11:50:57.656Z INFO  opt_dist::exec] Executing `RUST_BACKTRACE=full python3 /checkout/x.py build --target x86_64-unknown-linux-gnu --host x86_64-unknown-linux-gnu --stage 2 library/std --set rust.llvm-bitcode-linker=false --set build.extended=false --set rust.codegen-backends=['llvm'] --set rust.deny-warnings=false rustdoc cargo --set pgo.rustc.generate="/tmp/tmp-multistage/opt-artifacts/rustc-pgo" --set pgo.cargo.generate="/tmp/tmp-multistage/opt-artifacts/rustc-pgo" --set pgo.rustdoc.generate="/tmp/tmp-multistage/opt-artifacts/rustc-pgo" --set llvm.thin-lto=false --set llvm.link-shared=true [at /checkout/obj]`
##[group]Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.06s
##[endgroup]
[TIMING:start] compile::Assemble { target_compiler: Compiler { stage: 2, host: x86_64-unknown-linux-gnu, forced_compiler: false } }
[TIMING:start] builder::Libdir { compiler: Compiler { stage: 2, host: x86_64-unknown-linux-gnu, forced_compiler: false }, target: x86_64-unknown-linux-gnu }
---

stderr=    Checking serde v1.0.219 (/tmp/.tmpH5cXOk)

thread 'main' (26618) panicked at collector/src/bin/rustc-fake.rs:368:21:
command did not complete successfully: RUSTC_FORCE_INCR_COMP_ARTIFACT_HEADER="rustc-perf" RUSTC_FORCE_RUSTC_VERSION="rustc-perf" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--crate-name" "serde" "--edition=2018" "src/lib.rs" "--error-format=json" "--json=diagnostic-rendered-ansi,artifacts,future-incompat" "--crate-type" "lib" "--emit=dep-info,metadata" "-C" "embed-bitcode=no" "-C" "debuginfo=2" "--cfg" "feature=\"default\"" "--cfg" "feature=\"std\"" "--check-cfg" "cfg(docsrs,test)" "--check-cfg" "cfg(feature, values(\"alloc\", \"default\", \"derive\", \"rc\", \"serde_derive\", \"std\", \"unstable\"))" "-C" "metadata=e1f98a0381728faf" "-C" "extra-filename=-349e6dbd4b5e2d48" "--out-dir" "/tmp/.tmpH5cXOk/target/debug/deps" "-C" "linker=clang" "-L" "dependency=/tmp/.tmpH5cXOk/target/debug/deps" "-Znext-solver=globally" "--check-cfg" "cfg(no_core_cstr)" "--check-cfg" "cfg(no_core_error)" "--check-cfg" "cfg(no_core_net)" "--check-cfg" "cfg(no_core_num_saturating)" "--check-cfg" "cfg(no_core_try_from)" "--check-cfg" "cfg(no_diagnostic_namespace)" "--check-cfg" "cfg(no_float_copysign)" "--check-cfg" "cfg(no_num_nonzero_signed)" "--check-cfg" "cfg(no_relaxed_trait_bounds)" "--check-cfg" "cfg(no_serde_derive)" "--check-cfg" "cfg(no_std_atomic)" "--check-cfg" "cfg(no_std_atomic64)" "--check-cfg" "cfg(no_systemtime_checked_add)" "--check-cfg" "cfg(no_target_has_atomic)" "-Adeprecated" "-Aunknown-lints" "-Zincremental-verify-ich"
stderr:
error[E0277]: values of type `A` may not be movable
##[error]    --> src/de/value.rs:1885:22
     |
1885 |         type First = A;
---
1879 |         type First;
     |         ^^^^^^^^^^^ required by this bound in `Pair::First`
help: consider restricting type parameter `A` with unstable trait `Move`
     |
1884 |     impl<A: std::marker::Move, B> Pair for (A, B) {
     |           +++++++++++++++++++

error[E0277]: values of type `B` may not be movable
##[error]    --> src/de/value.rs:1886:23
     |
---
1880 |         type Second;
     |         ^^^^^^^^^^^^ required by this bound in `Pair::Second`
help: consider restricting type parameter `B` with unstable trait `Move`
     |
1884 |     impl<A, B: std::marker::Move> Pair for (A, B) {
     |              +++++++++++++++++++

error[E0277]: values of type `A` may not be movable
##[error]    --> src/de/value.rs:1884:25
     |
1884 |     impl<A, B> Pair for (A, B) {
     |                         ^^^^^^ may not be movable
     |
     = note: required because it appears within the type `(A, B)`
note: required for `(A, B)` to implement `Pair`
    --> src/de/value.rs:1878:15
     |
1878 |     pub trait Pair {
     |               ^^^^
help: consider restricting type parameter `A` with unstable trait `Move`
     |
1884 |     impl<A: std::marker::Move, B> Pair for (A, B) {
     |           +++++++++++++++++++

error[E0277]: values of type `T` may not be movable
##[error]    --> src/de/impls.rs:1253:18
     |
---
1286 |     type Value;
     |     ^^^^^^^^^^^ required by this bound in `Visitor::Value`
help: consider restricting type parameter `T` with unstable trait `Move`
     |
1252 | impl<'de, T: std::marker::Move> Visitor<'de> for ArrayVisitor<[T; 0]> {
     |            +++++++++++++++++++

error[E0277]: values of type `T` may not be movable
##[error]    --> src/de/impls.rs:1269:35
     |
1269 | impl<'de, T> Deserialize<'de> for [T; 0] {
     |                                   ^^^^^^ may not be movable
     |
     = note: required because it appears within the type `[T; 0]`
note: required for `[T; 0]` to implement `Deserialize<'de>`
    --> src/de/mod.rs:541:11
     |
 541 | pub trait Deserialize<'de>: Sized {
     |           ^^^^^^^^^^^
help: consider restricting type parameter `T` with unstable trait `Move`
     |
1269 | impl<'de, T: std::marker::Move> Deserialize<'de> for [T; 0] {
     |            +++++++++++++++++++

error[E0277]: values of type `T` may not be movable
##[error]   --> src/ser/impls.rs:133:23
    |
133 | impl<T> Serialize for [T; 0] {
    |                       ^^^^^^ may not be movable
    |
    = note: required because it appears within the type `[T; 0]`
note: required for `[T; 0]` to implement `Serialize`
   --> src/ser/mod.rs:225:11
    |
225 | pub trait Serialize {
    |           ^^^^^^^^^
help: consider restricting type parameter `T` with unstable trait `Move`
    |
133 | impl<T: std::marker::Move> Serialize for [T; 0] {
    |       +++++++++++++++++++

error[E0277]: values of type `H` may not be movable
##[error]   --> src/ser/impls.rs:195:46
    |
195 |           impl<T $(, $typaram)*> Serialize for $ty<T $(, $typaram)*>
    |                                                ^^^^^^^^^^^^^^^^^^^^^ may not be movable
...
245 | / seq_impl! {
246 | |     #[cfg(feature = "std")]
247 | |     #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
248 | |     HashSet<T: Eq + Hash, H: BuildHasher>
249 | | }
    | |_- in this macro invocation
    |
note: required because it appears within the type `hashbrown::map::HashMap<T, (), H>`
   --> /rust/deps/hashbrown-0.17.1/src/map.rs:182:11
note: required because it appears within the type `hashbrown::set::HashSet<T, H>`
   --> /rust/deps/hashbrown-0.17.1/src/set.rs:111:11
note: required because it appears within the type `std::collections::HashSet<T, H>`
   --> /checkout/library/std/src/collections/hash/set.rs:126:12
    |
126 | pub struct HashSet<
    |            ^^^^^^^
note: required for `std::collections::HashSet<T, H>` to implement `Serialize`
   --> src/ser/mod.rs:225:11
    |
225 | pub trait Serialize {
    |           ^^^^^^^^^
    = note: this error originates in the macro `seq_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider further restricting type parameter `H` with unstable trait `Move`
    |
197 |             T: Serialize, H: std::marker::Move
    |                           ++++++++++++++++++++

error[E0277]: values of type `H` may not be movable
##[error]   --> src/ser/impls.rs:455:49
    |
455 |           impl<K, V $(, $typaram)*> Serialize for $ty<K, V $(, $typaram)*>
    |                                                   ^^^^^^^^^^^^^^^^^^^^^^^^ may not be movable
...
501 | / map_impl! {
502 | |     #[cfg(feature = "std")]
503 | |     #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
504 | |     HashMap<K: Eq + Hash, V, H: BuildHasher>
505 | | }
    | |_- in this macro invocation
    |
note: required because it appears within the type `hashbrown::map::HashMap<K, V, H>`
   --> /rust/deps/hashbrown-0.17.1/src/map.rs:182:11
note: required because it appears within the type `std::collections::HashMap<K, V, H>`
   --> /checkout/library/std/src/collections/hash/map.rs:246:12
    |
246 | pub struct HashMap<
    |            ^^^^^^^
note: required for `std::collections::HashMap<K, V, H>` to implement `Serialize`
   --> src/ser/mod.rs:225:11
    |
225 | pub trait Serialize {
    |           ^^^^^^^^^
    = note: this error originates in the macro `map_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
---

error[E0277]: values of type `Ok` may not be movable
##[error]    --> src/ser/impossible.rs:72:15
     |
  72 |     type Ok = Ok;
     |               ^^ may not be movable
     |
note: required by a bound in `ser::SerializeSeq::Ok`
    --> src/ser/mod.rs:1499:5
     |
1499 |     type Ok;
     |     ^^^^^^^^ required by this bound in `SerializeSeq::Ok`
help: consider further restricting type parameter `Ok` with unstable trait `Move`
     |
  70 |     Error: ser::Error, Ok: std::marker::Move
     |                        +++++++++++++++++++++

error[E0277]: values of type `Ok` may not be movable
##[error]    --> src/ser/impossible.rs:92:15
     |
  92 |     type Ok = Ok;
     |               ^^ may not be movable
     |
note: required by a bound in `ser::SerializeTuple::Ok`
    --> src/ser/mod.rs:1599:5
     |
1599 |     type Ok;
---

error[E0277]: values of type `Ok` may not be movable
##[error]    --> src/ser/impossible.rs:112:15
     |
 112 |     type Ok = Ok;
     |               ^^ may not be movable
     |
note: required by a bound in `ser::SerializeTupleStruct::Ok`
    --> src/ser/mod.rs:1644:5
     |
1644 |     type Ok;
---

error[E0277]: values of type `Ok` may not be movable
##[error]    --> src/ser/impossible.rs:132:15
     |
 132 |     type Ok = Ok;
     |               ^^ may not be movable
     |
note: required by a bound in `ser::SerializeTupleVariant::Ok`
    --> src/ser/mod.rs:1702:5
     |
1702 |     type Ok;
---

error[E0277]: values of type `Ok` may not be movable
##[error]    --> src/ser/impossible.rs:152:15
     |
 152 |     type Ok = Ok;
     |               ^^ may not be movable
     |
note: required by a bound in `ser::SerializeMap::Ok`
    --> src/ser/mod.rs:1768:5
     |
1768 |     type Ok;
---

error[E0277]: values of type `Ok` may not be movable
##[error]    --> src/ser/impossible.rs:180:15
     |
 180 |     type Ok = Ok;
     |               ^^ may not be movable
     |
note: required by a bound in `ser::SerializeStruct::Ok`
    --> src/ser/mod.rs:1858:5
     |
1858 |     type Ok;
---

error[E0277]: values of type `Ok` may not be movable
##[error]    --> src/ser/impossible.rs:201:15
     |
 201 |     type Ok = Ok;
     |               ^^ may not be movable
     |
note: required by a bound in `ser::SerializeStructVariant::Ok`
    --> src/ser/mod.rs:1922:5
     |
1922 |     type Ok;
---
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/anyhow-1.0.103/src/backtrace.rs:10:14
   1: collector::check_command_output
             at ./collector/src/lib.rs:236:13
   2: collector::async_command_output::{closure#0}
             at ./collector/src/lib.rs:263:5
   3: <collector::compile::execute::CargoProcess>::run_rustc::{closure#0}
             at ./collector/src/compile/execute/mod.rs:528:52
   4: <collector::compile::benchmark::Benchmark>::measure::{closure#0}
             at ./collector/src/compile/benchmark/mod.rs:451:26
   5: <core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}> as core::future::future::Future>::poll
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/future/future.rs:133:9
   6: <tokio::runtime::scheduler::current_thread::CoreGuard>::block_on::<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}::{closure#0}::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:778:70
   7: tokio::task::coop::with_budget::<core::task::poll::Poll<core::result::Result<(), anyhow::Error>>, <tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}::{closure#0}::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/task/coop/mod.rs:167:5
   8: tokio::task::coop::budget::<core::task::poll::Poll<core::result::Result<(), anyhow::Error>>, <tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}::{closure#0}::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/task/coop/mod.rs:133:5
   9: <tokio::runtime::scheduler::current_thread::CoreGuard>::block_on::<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:778:25
  10: <tokio::runtime::scheduler::current_thread::Context>::enter::<core::task::poll::Poll<core::result::Result<(), anyhow::Error>>, <tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:451:19
  11: <tokio::runtime::scheduler::current_thread::CoreGuard>::block_on::<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:777:44
  12: <tokio::runtime::scheduler::current_thread::CoreGuard>::enter::<<tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}, core::option::Option<core::result::Result<(), anyhow::Error>>>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:865:68
  13: <tokio::runtime::context::scoped::Scoped<tokio::runtime::scheduler::Context>>::set::<<tokio::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}, core::option::Option<core::result::Result<(), anyhow::Error>>>::{closure#0}, (alloc::boxed::Box<tokio::runtime::scheduler::current_thread::Core>, core::option::Option<core::result::Result<(), anyhow::Error>>)>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/context/scoped.rs:40:9
  14: tokio::runtime::context::set_scheduler::<(alloc::boxed::Box<tokio::runtime::scheduler::current_thread::Core>, core::option::Option<core::result::Result<(), anyhow::Error>>), <tokio::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}, core::option::Option<core::result::Result<(), anyhow::Error>>>::{closure#0}>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/context.rs:181:38
  15: <std::thread::local::LocalKey<tokio::runtime::context::Context>>::try_with::<tokio::runtime::context::set_scheduler<(alloc::boxed::Box<tokio::runtime::scheduler::current_thread::Core>, core::option::Option<core::result::Result<(), anyhow::Error>>), <tokio::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}, core::option::Option<core::result::Result<(), anyhow::Error>>>::{closure#0}>::{closure#0}, (alloc::boxed::Box<tokio::runtime::scheduler::current_thread::Core>, core::option::Option<core::result::Result<(), anyhow::Error>>)>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/thread/local.rs:463:12
  16: <std::thread::local::LocalKey<tokio::runtime::context::Context>>::with::<tokio::runtime::context::set_scheduler<(alloc::boxed::Box<tokio::runtime::scheduler::current_thread::Core>, core::option::Option<core::result::Result<(), anyhow::Error>>), <tokio::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}, core::option::Option<core::result::Result<(), anyhow::Error>>>::{closure#0}>::{closure#0}, (alloc::boxed::Box<tokio::runtime::scheduler::current_thread::Core>, core::option::Option<core::result::Result<(), anyhow::Error>>)>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/thread/local.rs:427:20
  17: tokio::runtime::context::set_scheduler::<(alloc::boxed::Box<tokio::runtime::scheduler::current_thread::Core>, core::option::Option<core::result::Result<(), anyhow::Error>>), <tokio::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}, core::option::Option<core::result::Result<(), anyhow::Error>>>::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/context.rs:181:17
  18: <tokio::runtime::scheduler::current_thread::CoreGuard>::enter::<<tokio::runtime::scheduler::current_thread::CoreGuard>::block_on<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>::{closure#0}, core::option::Option<core::result::Result<(), anyhow::Error>>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:865:27
  19: <tokio::runtime::scheduler::current_thread::CoreGuard>::block_on::<core::pin::Pin<&mut <collector::compile::benchmark::Benchmark>::measure::{closure#0}>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:765:24
  20: <tokio::runtime::scheduler::current_thread::CurrentThread>::block_on::<<collector::compile::benchmark::Benchmark>::measure::{closure#0}>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:205:33
  21: tokio::runtime::context::runtime::enter_runtime::<<tokio::runtime::scheduler::current_thread::CurrentThread>::block_on<<collector::compile::benchmark::Benchmark>::measure::{closure#0}>::{closure#0}, core::result::Result<(), anyhow::Error>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/context/runtime.rs:65:16
  22: <tokio::runtime::scheduler::current_thread::CurrentThread>::block_on::<<collector::compile::benchmark::Benchmark>::measure::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/scheduler/current_thread/mod.rs:193:9
  23: <tokio::runtime::runtime::Runtime>::block_on_inner::<<collector::compile::benchmark::Benchmark>::measure::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/runtime.rs:371:52
  24: <tokio::runtime::runtime::Runtime>::block_on::<<collector::compile::benchmark::Benchmark>::measure::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.3/src/runtime/runtime.rs:345:18
  25: collector::utils::wait_for_future::<<collector::compile::benchmark::Benchmark>::measure::{closure#0}, core::result::Result<(), anyhow::Error>>
             at ./collector/src/utils/mod.rs:16:10
  26: collector::profile_compile::{closure#0}
             at ./collector/src/bin/collector.rs:243:26
  27: <&collector::profile_compile::{closure#0} as core::ops::function::FnMut<((usize, &collector::compile::benchmark::Benchmark),)>>::call_mut
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/ops/function.rs:274:22
  28: core::iter::adapters::map::map_fold::<(usize, &collector::compile::benchmark::Benchmark), usize, usize, &collector::profile_compile::{closure#0}, <usize as core::iter::traits::accum::Sum>::sum<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/iter/adapters/map.rs:88:28
  29: <core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>> as core::iter::adapters::zip::ZipImpl<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>>::fold::<usize, core::iter::adapters::map::map_fold<(usize, &collector::compile::benchmark::Benchmark), usize, usize, &collector::profile_compile::{closure#0}, <usize as core::iter::traits::accum::Sum>::sum<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/iter/adapters/zip.rs:281:25
  30: <core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>> as core::iter::traits::iterator::Iterator>::fold::<usize, core::iter::adapters::map::map_fold<(usize, &collector::compile::benchmark::Benchmark), usize, usize, &collector::profile_compile::{closure#0}, <usize as core::iter::traits::accum::Sum>::sum<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/iter/adapters/zip.rs:101:9
  31: <core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}> as core::iter::traits::iterator::Iterator>::fold::<usize, <usize as core::iter::traits::accum::Sum>::sum<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}>>::{closure#0}>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/iter/adapters/map.rs:128:19
  32: <usize as core::iter::traits::accum::Sum>::sum::<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}>>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/iter/traits/accum.rs:52:22
  33: <core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}> as core::iter::traits::iterator::Iterator>::sum::<usize>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/iter/traits/iterator.rs:3674:9
  34: <rayon::iter::sum::SumFolder<usize> as rayon::iter::plumbing::Folder<usize>>::consume_iter::<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>, &collector::profile_compile::{closure#0}>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.12.0/src/iter/sum.rs:99:49
  35: <rayon::iter::map::MapFolder<rayon::iter::sum::SumFolder<usize>, collector::profile_compile::{closure#0}> as rayon::iter::plumbing::Folder<(usize, &collector::compile::benchmark::Benchmark)>>::consume_iter::<core::iter::adapters::zip::Zip<core::ops::range::Range<usize>, core::slice::iter::Iter<collector::compile::benchmark::Benchmark>>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.12.0/src/iter/map.rs:244:31
  36: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>> as rayon::iter::plumbing::Producer>::fold_with::<rayon::iter::map::MapFolder<rayon::iter::sum::SumFolder<usize>, collector::profile_compile::{closure#0}>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.12.0/src/iter/plumbing/mod.rs:107:16
  37: rayon::iter::plumbing::bridge_producer_consumer::helper::<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.12.0/src/iter/plumbing/mod.rs:432:22
  38: rayon::iter::plumbing::bridge_producer_consumer::helper::<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.12.0/src/iter/plumbing/mod.rs:412:21
  39: rayon_core::join::join_context::call_a::<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/join/mod.rs:124:17
  40: <core::panic::unwind_safe::AssertUnwindSafe<rayon_core::join::join_context::call_a<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/panic/unwind_safe.rs:275:9
  41: std::panicking::catch_unwind::do_call::<core::panic::unwind_safe::AssertUnwindSafe<rayon_core::join::join_context::call_a<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}>, usize>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:576:43
  42: __rust_try
  43: std::panicking::catch_unwind::<usize, core::panic::unwind_safe::AssertUnwindSafe<rayon_core::join::join_context::call_a<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}>>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:544:19
  44: std::panic::catch_unwind::<core::panic::unwind_safe::AssertUnwindSafe<rayon_core::join::join_context::call_a<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}>, usize>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panic.rs:359:14
  45: rayon_core::unwind::halt_unwinding::<rayon_core::join::join_context::call_a<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}>::{closure#0}, usize>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/unwind.rs:17:5
  46: rayon_core::join::join_context::<rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}, usize, usize>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/join/mod.rs:142:24
  47: rayon_core::registry::in_worker::<rayon_core::join::join_context<rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}, usize, usize>::{closure#0}, (usize, usize)>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:957:13
  48: rayon_core::join::join_context::<rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#0}, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}, usize, usize>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/join/mod.rs:132:5
  49: rayon::iter::plumbing::bridge_producer_consumer::helper::<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.12.0/src/iter/plumbing/mod.rs:410:47
  50: rayon::iter::plumbing::bridge_producer_consumer::helper::<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.12.0/src/iter/plumbing/mod.rs:421:21
  51: rayon_core::join::join_context::call_b::<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/join/mod.rs:129:25
  52: <rayon_core::job::JobResult<usize>>::call::<rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}>::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/job.rs:218:41
  53: <core::panic::unwind_safe::AssertUnwindSafe<<rayon_core::job::JobResult<usize>>::call<rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}>::{closure#0}> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/panic/unwind_safe.rs:275:9
  54: std::panicking::catch_unwind::do_call::<core::panic::unwind_safe::AssertUnwindSafe<<rayon_core::job::JobResult<usize>>::call<rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}>::{closure#0}>, usize>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:576:43
  55: __rust_try
  56: std::panicking::catch_unwind::<usize, core::panic::unwind_safe::AssertUnwindSafe<<rayon_core::job::JobResult<usize>>::call<rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}>::{closure#0}>>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:544:19
  57: std::panic::catch_unwind::<core::panic::unwind_safe::AssertUnwindSafe<<rayon_core::job::JobResult<usize>>::call<rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}>::{closure#0}>, usize>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panic.rs:359:14
  58: rayon_core::unwind::halt_unwinding::<<rayon_core::job::JobResult<usize>>::call<rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}>::{closure#0}, usize>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/unwind.rs:17:5
  59: <rayon_core::job::JobResult<usize>>::call::<rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/job.rs:218:15
  60: <rayon_core::job::StackJob<rayon_core::latch::SpinLatch, rayon_core::join::join_context::call_b<usize, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterProducer<collector::compile::benchmark::Benchmark>>, rayon::iter::map::MapConsumer<rayon::iter::sum::SumConsumer<usize>, collector::profile_compile::{closure#0}>>::{closure#1}>::{closure#0}, usize> as rayon_core::job::Job>::execute
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/job.rs:120:32
  61: <rayon_core::job::JobRef>::execute
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/job.rs:64:9
  62: <rayon_core::registry::WorkerThread>::execute
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:866:13
  63: <rayon_core::registry::WorkerThread>::wait_until_cold
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:800:26
  64: <rayon_core::registry::WorkerThread>::wait_until::<rayon_core::latch::OnceLatch>
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:775:18
  65: <rayon_core::registry::WorkerThread>::wait_until_out_of_work
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:824:14
  66: rayon_core::registry::main_loop
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:929:19
  67: <rayon_core::registry::ThreadBuilder>::run
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:50:18
  68: <rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}
             at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.13.0/src/registry.rs:95:27
  69: std::sys::backtrace::__rust_begin_short_backtrace::<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/sys/backtrace.rs:166:18
  70: std::thread::lifecycle::spawn_unchecked::<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>::{closure#1}::{closure#0}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/thread/lifecycle.rs:70:13
  71: <core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>::{closure#1}::{closure#0}> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/panic/unwind_safe.rs:275:9
  72: std::panicking::catch_unwind::do_call::<core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>::{closure#1}::{closure#0}>, ()>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:576:43
  73: __rust_try
  74: std::panicking::catch_unwind::<(), core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>::{closure#1}::{closure#0}>>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:544:19
  75: std::panic::catch_unwind::<core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>::{closure#1}::{closure#0}>, ()>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panic.rs:359:14
  76: std::thread::lifecycle::spawn_unchecked::<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>::{closure#1}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/thread/lifecycle.rs:68:26
  77: <std::thread::lifecycle::spawn_unchecked<<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{closure#0}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/ops/function.rs:250:5
  78: <alloc::boxed::Box<dyn core::ops::function::FnOnce<(), Output = ()> + core::marker::Send> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/alloc/src/boxed.rs:2319:9
  79: <std::sys::thread::unix::Thread>::new::thread_start
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/sys/thread/unix.rs:123:17
---
   5: std::sys::backtrace::__rust_begin_short_backtrace::<fn(), ()>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/sys/backtrace.rs:166:18
   6: std::rt::lang_start::<()>::{closure#0}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/rt.rs:206:18
   7: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/ops/function.rs:287:21
   8: std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:576:43
   9: std::panicking::catch_unwind::<i32, &dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:544:19
  10: std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panic.rs:359:14
  11: std::rt::lang_start_internal::{closure#0}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/rt.rs:175:24
  12: std::panicking::catch_unwind::do_call::<std::rt::lang_start_internal::{closure#0}, isize>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:576:43
---

Stack backtrace:
   0: <anyhow::Error>::msg::<alloc::string::String>
             at /rust/deps/anyhow-1.0.102/src/backtrace.rs:10:14
   1: <opt_dist::exec::CmdBuilder>::run
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/exec.rs:81:17
   2: opt_dist::training::gather_pgo_profiles::{closure#0}
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/training.rs:183:14
   3: opt_dist::utils::with_log_group::<opt_dist::training::gather_pgo_profiles::{closure#0}, core::result::Result<(), anyhow::Error>>
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/utils/mod.rs:68:22
   4: opt_dist::training::gather_pgo_profiles
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/training.rs:180:5
   5: opt_dist::training::gather_rustc_profiles
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/training.rs:154:5
   6: opt_dist::execute_pipeline::{closure#1}::{closure#1}
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/main.rs:269:17
   7: <opt_dist::timer::TimerSection>::section::<opt_dist::execute_pipeline::{closure#1}::{closure#1}, opt_dist::training::RustcPGOProfile>
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/timer.rs:111:22
   8: opt_dist::execute_pipeline::{closure#1}
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/main.rs:268:39
   9: <opt_dist::timer::TimerSection>::section::<opt_dist::execute_pipeline::{closure#1}, (opt_dist::training::RustcPGOProfile, opt_dist::training::RustdocPGOProfile)>
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/timer.rs:111:22
  10: opt_dist::execute_pipeline
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/main.rs:243:15
  11: opt_dist::main
             at /rustc/b373540690a25c6d1bd722de1a49b2aa62598590/src/tools/opt-dist/src/main.rs:516:18
  12: <fn() -> core::result::Result<(), anyhow::Error> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/ops/function.rs:250:5
  13: std::sys::backtrace::__rust_begin_short_backtrace::<fn() -> core::result::Result<(), anyhow::Error>, core::result::Result<(), anyhow::Error>>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/sys/backtrace.rs:166:18
  14: std::rt::lang_start::<core::result::Result<(), anyhow::Error>>::{closure#0}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/rt.rs:206:18
  15: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/core/src/ops/function.rs:287:21
  16: std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:576:43
  17: std::panicking::catch_unwind::<i32, &dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:544:19
  18: std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panic.rs:359:14
  19: std::rt::lang_start_internal::{closure#0}
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/rt.rs:175:24
  20: std::panicking::catch_unwind::do_call::<std::rt::lang_start_internal::{closure#0}, isize>
             at /rustc/08d5b675a9b2abdca5e2fe4eabe0e07bbda15d49/library/std/src/panicking.rs:576:43

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

Labels

A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. perf-regression Performance regression. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. S-waiting-on-perf Status: Waiting on a perf run to be completed. 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. T-rust-analyzer Relevant to the rust-analyzer team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants