Skip to content

Conversation

Jules-Bertholet
Copy link
Contributor

This hard error serves no purpose.
Fixes #143143.

(Documentation of E0719: https://doc.rust-lang.org/stable/error_codes/E0719.html)

@rustbot label T-lang needs-fcp

@rustbot
Copy link
Collaborator

rustbot commented Jun 28, 2025

r? @compiler-errors

rustbot has assigned @compiler-errors.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added 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. labels Jun 28, 2025
@rustbot
Copy link
Collaborator

rustbot commented Jun 28, 2025

Some changes occurred in diagnostic error codes

cc @GuillaumeGomez

HIR ty lowering was modified

cc @fmease

@rustbot rustbot added needs-fcp This change is insta-stable, or significant enough to need a team FCP to proceed. T-lang Relevant to the language team labels Jun 28, 2025
@rustbot

This comment has been minimized.

@fmease
Copy link
Member

fmease commented Jun 28, 2025

more importantly cc @rust-lang/types rather than T-lang

@fmease fmease added T-types Relevant to the types team, which will review and decide on the PR/issue. and removed T-lang Relevant to the language team T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jun 28, 2025
@fmease fmease changed the title Remove E0719 Allow specifying multiple associated type bindings for same GAT if gen args differ Jun 28, 2025
@fmease fmease changed the title Allow specifying multiple associated type bindings for same GAT if gen args differ Allow specifying multiple associated type bindings Jun 28, 2025
@Jules-Bertholet Jules-Bertholet changed the title Allow specifying multiple associated type bindings Allow specifying multiple bounds for same associated type (remove E0719) Jun 28, 2025
@fmease fmease changed the title Allow specifying multiple bounds for same associated type (remove E0719) Allow specifying multiple bounds for same associated item (remove E0719) Jun 28, 2025
@rust-log-analyzer

This comment has been minimized.

@Jules-Bertholet Jules-Bertholet requested a review from fmease June 28, 2025 17:20
Copy link
Member

@fmease fmease Jun 28, 2025

Choose a reason for hiding this comment

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

(commenting on a random file so it's threaded)

Thanks for incorporating my suggestion about adding more tests!

What are the interactions with trait object types? It's possible that lower_trait_object_ty still ends up rejecting such dyn-Traits (e.g., dyn Trait<X = i32, X = u64>) due to its intricate and delicate logic but I might not be right. For example, we currently reject:

#![feature(trait_alias)]
trait Iter = Iterator<Item = ()>;
fn f(_: Box<dyn Iter<Item = u64>>) {} //~ ERROR conflicting associated type bounds for `Item` when expanding trait alias

I'm curious about whether that gets triggered for sth. like dyn Trait<X = i32, X = u64> 🤔 If not, I wonder if we should then also lift this trait alias restriction?

I don't know the soundness implications of allowing these equality predicates in trait object types since I haven't spent much thought on it. In my mind, a trait object type with "impossible" existential projection predicates should be fine, it would just be impossible to construct a value of it. Anyhow, I'm not qualified enough to draw a proper conclusion.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good catch! It looks like we do trigger that error. I added tests, and tweaked the error message to be more generic.

Interestingly, it seems that if you do:

trait Sup {
    type Assoc;
}

trait Sub: Sup<Assoc = u32> {}

type Foo = dyn Sub<Assoc = i32>;

Then no error is emitted, but Foo does not implement Sub.

@compiler-errors
Copy link
Member

r? fmease

@rustbot rustbot assigned fmease and unassigned compiler-errors Jul 16, 2025
@rustbot
Copy link
Collaborator

rustbot commented Jul 16, 2025

fmease is not on the review rotation at the moment.
They may take a while to respond.

@bors
Copy link
Collaborator

bors commented Jul 19, 2025

☔ The latest upstream changes (presumably #144145) made this pull request unmergeable. Please resolve the merge conflicts.

@Jules-Bertholet Jules-Bertholet force-pushed the remove-e0719 branch 2 times, most recently from d120d7d to c9410f5 Compare July 25, 2025 22:33
fn foo() {}
}

trait Subtrait: Trait<Gat<u32> = u32, Gat<u64> = u64> {}
Copy link
Member

@fmease fmease Sep 8, 2025

Choose a reason for hiding this comment

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

(minor) the subdirectory associated-type-bounds/ is meant for ATBs only as in TraitRef<AssocTy: Bounds> the recently stabilized feature, so not for assoc item bindings / equality constraints.

@fmease
Copy link
Member

fmease commented Sep 8, 2025

rerolling back to a types reviewer since I don't know t-types's vibe and can't initiate an fcp (whether close or merge)

r? types

@rustbot

This comment has been minimized.

This hard error serves no purpose.
Fixes rust-lang#143143
@rustbot
Copy link
Collaborator

rustbot commented Sep 8, 2025

This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@BoxyUwU
Copy link
Member

BoxyUwU commented Sep 8, 2025

r? BoxyUwU

I'll get to this before the end of the week

@rustbot rustbot assigned BoxyUwU and unassigned spastorino Sep 8, 2025
@jackh726
Copy link
Member

jackh726 commented Sep 8, 2025

I actually imagine this is just a lang FCP. I don't see foresee any issues or complications on the types side.

@fmease fmease added I-lang-nominated Nominated for discussion during a lang team meeting. T-lang Relevant to the language team and removed T-types Relevant to the types team, which will review and decide on the PR/issue. labels Sep 8, 2025
@traviscross traviscross added the P-lang-drag-1 Lang team prioritization drag level 1. https://rust-lang.zulipchat.com/#narrow/channel/410516-t-lang label Sep 9, 2025
@traviscross
Copy link
Contributor

@Jules-Bertholet, if you could write up what's being proposed for stabilization for the lang nomination, particularly regarding what the edges of this are, the interaction with dyn, etc., that'd be helpful.

I don't see the restriction this relaxes in the Reference, so if for whatever reason we decide not to do this, we should document the restriction.

cc @rust-lang/lang-docs

@theemathas
Copy link
Contributor

The following code ICEs with this PR:

pub trait Trait {
    type Assoc: Copy + 'static;
}

const fn conjure<T>() -> T {
    panic!()
}

const fn get_assoc<T: Trait>() -> impl Copy {
    conjure::<<T as Trait>::Assoc>()
}

pub fn foo<T: Trait<Assoc = i32, Assoc = i64>>() {
    const {
        get_assoc::<T>();
    }
}
Compiler output
    Checking foo v0.1.0 (/Users/timch/foo)
note: no errors encountered even though delayed bugs were created

note: those delayed bugs will now be shown as internal compiler errors

error: internal compiler error: unexpected ambiguity: CanonicalQueryInput { canonical: Canonical { value: ParamEnvAnd { param_env: ParamEnv { caller_bounds: [Binder { value: ProjectionPredicate(AliasTerm { args: [T/#0], def_id: DefId(0:4 ~ foo[ac7b]::Trait::Assoc), .. }, Term::Ty(i64)), bound_vars: [] }, Binder { value: ProjectionPredicate(AliasTerm { args: [T/#0], def_id: DefId(0:4 ~ foo[ac7b]::Trait::Assoc), .. }, Term::Ty(i32)), bound_vars: [] }, Binder { value: TraitPredicate(<T as Trait>, polarity:Positive), bound_vars: [] }, Binder { value: TraitPredicate(<T as std::marker::Sized>, polarity:Positive), bound_vars: [] }] }, value: AliasTy { args: [T/#0], def_id: DefId(0:4 ~ foo[ac7b]::Trait::Assoc), .. } }, max_universe: U0, variables: [] }, typing_mode: PostAnalysis } Canonical { value: QueryResponse { var_values: CanonicalVarValues { var_values: [] }, region_constraints: QueryRegionConstraints { outlives: [], assumptions: [] }, certainty: Ambiguous, opaque_types: [], value: NormalizationResult { normalized_ty: ^0 } }, max_universe: U0, variables: [Ty(General(U0))] }
  |
  = note: delayed at compiler/rustc_trait_selection/src/traits/query/normalize.rs:288:30
             0: std::backtrace_rs::backtrace::libunwind::trace
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
             1: std::backtrace_rs::backtrace::trace_unsynchronized
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
             2: std::backtrace::Backtrace::create
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/backtrace.rs:331:13
             3: emit_diagnostic
                       at /Users/timch/rust/compiler/rustc_errors/src/lib.rs:1571:41
             4: emit_diagnostic
                       at /Users/timch/rust/compiler/rustc_errors/src/lib.rs:1135:33
             5: emit_producing_error_guaranteed<rustc_span::ErrorGuaranteed>
                       at /Users/timch/rust/compiler/rustc_errors/src/diagnostic.rs:1393:29
             6: delayed_bug<alloc::string::String>
                       at /Users/timch/rust/compiler/rustc_errors/src/lib.rs:1357:68
             7: try_fold_ty
                       at /Users/timch/rust/compiler/rustc_trait_selection/src/traits/query/normalize.rs:288:30
             8: try_fold_ty
                       at /Users/timch/rust/compiler/rustc_trait_selection/src/traits/query/normalize.rs:249:41
             9: query_normalize<rustc_middle::ty::generic_args::GenericArg>
                       at /Users/timch/rust/compiler/rustc_trait_selection/src/traits/query/normalize.rs:106:28
            10: try_normalize_after_erasing_regions<rustc_middle::ty::generic_args::GenericArg>
                       at /Users/timch/rust/compiler/rustc_traits/src/normalize_erasing_regions.rs:27:39
            11: {closure#0}
                       at /Users/timch/rust/compiler/rustc_traits/src/normalize_erasing_regions.rs:14:13
            12: call_once<rustc_traits::normalize_erasing_regions::provide::{closure_env#0}, (rustc_middle::ty::context::TyCtxt, rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/ops/function.rs:253:5
            13: {closure#0}
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:294:9
            14: __rust_begin_short_backtrace<rustc_query_impl::query_impl::try_normalize_generic_arg_after_erasing_regions::dynamic_query::{closure#2}::{closure_env#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:578:18
            15: {closure#2}
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:655:25
            16: call_once<rustc_query_impl::query_impl::try_normalize_generic_arg_after_erasing_regions::dynamic_query::{closure_env#2}, (rustc_middle::ty::context::TyCtxt, rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/ops/function.rs:253:5
            17: compute<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/lib.rs:122:9
            18: {closure#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:556:39
            19: call_once<rustc_query_system::query::plumbing::execute_job_incr::{closure#2}::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, ((rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/ops/function.rs:253:5
            20: {closure#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:348:64
            21: {closure#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:60:9
            22: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:315:12
            23: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:279:20
            24: enter_context<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:57:9
            25: {closure#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/dep_graph/mod.rs:36:13
            26: {closure#0}<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:36
            27: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:79:18
            28: with_context<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:5
            29: with_deps<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/dep_graph/mod.rs:33:9
            30: {closure#1}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:348:37
            31: with_task<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>), rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:359:14
            32: {closure#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:552:24
            33: {closure#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:60:9
            34: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:315:12
            35: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:279:20
            36: enter_context<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:57:9
            37: {closure#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:161:13
            38: {closure#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:112:9
            39: {closure#0}<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:36
            40: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:79:18
            41: with_context<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:5
            42: with_related_context<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:103:5
            43: start_query<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:147:9
            44: execute_job_incr<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:539:40
            45: execute_job<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:420:9
            46: try_execute_query<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:372:13
            47: {closure#0}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:842:9
            48: maybe_grow<(rustc_middle::query::erase::Erased<[u8; 8]>, core::option::Option<rustc_query_system::dep_graph::graph::DepNodeIndex>), rustc_query_system::query::plumbing::get_query_incr::{closure_env#0}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stacker-0.1.21/src/lib.rs:57:9
            49: ensure_sufficient_stack<(rustc_middle::query::erase::Erased<[u8; 8]>, core::option::Option<rustc_query_system::dep_graph::graph::DepNodeIndex>), rustc_query_system::query::plumbing::get_query_incr::{closure_env#0}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/stack.rs:21:5
            50: get_query_incr<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:841:36
            51: __rust_end_short_backtrace
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:611:21
            52: query_get_at<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::generic_args::GenericArg>, rustc_middle::query::erase::Erased<[u8; 8]>>>
                       at /Users/timch/rust/compiler/rustc_middle/src/query/plumbing.rs:182:17
            53: try_normalize_generic_arg_after_erasing_regions
                       at /Users/timch/rust/compiler/rustc_middle/src/query/plumbing.rs:475:31
            54: try_normalize_generic_arg_after_erasing_regions
                       at /Users/timch/rust/compiler/rustc_middle/src/query/plumbing.rs:466:35
            55: try_normalize_generic_arg_after_erasing_regions
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:211:18
            56: try_fold_ty
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:223:20
            57: try_normalize_erasing_regions<rustc_middle::ty::Ty>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:93:19
            58: visit_ty
                       at /Users/timch/rust/compiler/rustc_mir_transform/src/post_analysis_normalize.rs:77:33
            59: super_local_decl<rustc_mir_transform::post_analysis_normalize::PostAnalysisNormalizeVisitor>
                       at /Users/timch/rust/compiler/rustc_middle/src/mir/visit.rs:879:22
            60: visit_local_decl<rustc_mir_transform::post_analysis_normalize::PostAnalysisNormalizeVisitor>
                       at /Users/timch/rust/compiler/rustc_middle/src/mir/visit.rs:261:22
            61: super_body_preserves_cfg<rustc_mir_transform::post_analysis_normalize::PostAnalysisNormalizeVisitor>
                       at /Users/timch/rust/compiler/rustc_middle/src/mir/visit.rs:1080:19
            62: visit_body_preserves_cfg<rustc_mir_transform::post_analysis_normalize::PostAnalysisNormalizeVisitor>
                       at /Users/timch/rust/compiler/rustc_middle/src/mir/visit.rs:1038:18
            63: run_pass
                       at /Users/timch/rust/compiler/rustc_mir_transform/src/post_analysis_normalize.rs:16:58
            64: run_passes_inner
                       at /Users/timch/rust/compiler/rustc_mir_transform/src/pass_manager.rs:308:22
            65: run_runtime_lowering_passes
                       at /Users/timch/rust/compiler/rustc_mir_transform/src/lib.rs:627:5
            66: run_analysis_to_runtime_passes
                       at /Users/timch/rust/compiler/rustc_mir_transform/src/lib.rs:572:5
            67: mir_drops_elaborated_and_const_checked
                       at /Users/timch/rust/compiler/rustc_mir_transform/src/lib.rs:541:5
            68: {closure#0}
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:294:9
            69: __rust_begin_short_backtrace<rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::dynamic_query::{closure#2}::{closure_env#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:578:18
            70: {closure#2}
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:655:25
            71: call_once<rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::dynamic_query::{closure_env#2}, (rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/ops/function.rs:253:5
            72: {closure#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:348:64
            73: {closure#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:60:9
            74: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:315:12
            75: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:279:20
            76: enter_context<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:57:9
            77: {closure#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/dep_graph/mod.rs:36:13
            78: {closure#0}<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:36
            79: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:79:18
            80: with_context<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:5
            81: with_deps<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/dep_graph/mod.rs:33:9
            82: {closure#1}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:348:37
            83: with_task<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>), rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:359:14
            84: {closure#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:552:24
            85: {closure#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:60:9
            86: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:315:12
            87: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:279:20
            88: enter_context<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:57:9
            89: {closure#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:161:13
            90: {closure#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:112:9
            91: {closure#0}<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:36
            92: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:79:18
            93: with_context<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:5
            94: with_related_context<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:103:5
            95: start_query<(rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:147:9
            96: execute_job_incr<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:539:40
            97: execute_job<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:420:9
            98: try_execute_query<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:372:13
            99: {closure#0}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:842:9
           100: maybe_grow<(rustc_middle::query::erase::Erased<[u8; 8]>, core::option::Option<rustc_query_system::dep_graph::graph::DepNodeIndex>), rustc_query_system::query::plumbing::get_query_incr::{closure_env#0}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stacker-0.1.21/src/lib.rs:57:9
           101: ensure_sufficient_stack<(rustc_middle::query::erase::Erased<[u8; 8]>, core::option::Option<rustc_query_system::dep_graph::graph::DepNodeIndex>), rustc_query_system::query::plumbing::get_query_incr::{closure_env#0}<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/stack.rs:21:5
           102: get_query_incr<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:841:36
           103: __rust_end_short_backtrace
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:611:21
           104: query_ensure<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>>
                       at /Users/timch/rust/compiler/rustc_middle/src/query/plumbing.rs:198:9
           105: mir_drops_elaborated_and_const_checked<rustc_span::def_id::LocalDefId>
                       at /Users/timch/rust/compiler/rustc_middle/src/query/plumbing.rs:233:9
           106: {closure#0}
                       at /Users/timch/rust/compiler/rustc_interface/src/passes.rs:1096:33
           107: {closure#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>
                       at /Users/timch/rust/compiler/rustc_middle/src/hir/map.rs:340:79
           108: {closure#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/sync/parallel.rs:181:30
           109: call_once<(), rustc_data_structures::sync::parallel::par_for_each_in::{closure#0}::{closure#1}::{closure_env#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/panic/unwind_safe.rs:272:9
           110: do_call<core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::parallel::par_for_each_in::{closure#0}::{closure#1}::{closure_env#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panicking.rs:589:40
           111: catch_unwind<(), core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::parallel::par_for_each_in::{closure#0}::{closure#1}::{closure_env#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panicking.rs:552:19
           112: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::parallel::par_for_each_in::{closure#0}::{closure#1}::{closure_env#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panic.rs:359:14
           113: run<(), rustc_data_structures::sync::parallel::par_for_each_in::{closure#0}::{closure#1}::{closure_env#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/sync/parallel.rs:23:9
           114: {closure#1}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/sync/parallel.rs:181:23
           115: for_each<rustc_span::def_id::LocalDefId, rustc_data_structures::sync::parallel::par_for_each_in::{closure#0}::{closure_env#1}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/slice/iter/macros.rs:277:21
           116: {closure#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/sync/parallel.rs:180:27
           117: parallel_guard<(), rustc_data_structures::sync::parallel::par_for_each_in::{closure_env#0}<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/sync/parallel.rs:39:15
           118: par_for_each_in<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], rustc_middle::hir::map::{impl#3}::par_hir_body_owners::{closure_env#0}<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/sync/parallel.rs:175:5
           119: par_hir_body_owners<rustc_interface::passes::run_required_analyses::{closure#1}::{closure_env#0}>
                       at /Users/timch/rust/compiler/rustc_middle/src/hir/map.rs:340:9
           120: {closure#1}
                       at /Users/timch/rust/compiler/rustc_interface/src/passes.rs:1081:13
           121: run<(), rustc_interface::passes::run_required_analyses::{closure_env#1}>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/profiling.rs:844:9
           122: time<(), rustc_interface::passes::run_required_analyses::{closure_env#1}>
                       at /Users/timch/rust/compiler/rustc_session/src/utils.rs:17:50
           123: run_required_analyses
                       at /Users/timch/rust/compiler/rustc_interface/src/passes.rs:1080:10
           124: analysis
                       at /Users/timch/rust/compiler/rustc_interface/src/passes.rs:1133:5
           125: {closure#0}
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:294:9
           126: __rust_begin_short_backtrace<rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2}::{closure_env#0}, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:578:18
           127: {closure#2}
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:655:25
           128: call_once<rustc_query_impl::query_impl::analysis::dynamic_query::{closure_env#2}, (rustc_middle::ty::context::TyCtxt, ())>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/ops/function.rs:253:5
           129: {closure#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:348:64
           130: {closure#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:60:9
           131: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:315:12
           132: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:279:20
           133: enter_context<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:57:9
           134: {closure#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/dep_graph/mod.rs:36:13
           135: {closure#0}<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:36
           136: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:79:18
           137: with_context<rustc_middle::dep_graph::{impl#0}::with_deps::{closure_env#0}<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:5
           138: with_deps<rustc_query_system::dep_graph::graph::{impl#4}::with_task::{closure#1}::{closure_env#0}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>, rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_middle/src/dep_graph/mod.rs:33:9
           139: {closure#1}<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:348:37
           140: with_task<rustc_middle::dep_graph::DepsType, (rustc_query_impl::plumbing::QueryCtxt, rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>), (), rustc_middle::query::erase::Erased<[u8; 0]>>
                       at /Users/timch/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:350:14
           141: {closure#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:552:24
           142: {closure#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:60:9
           143: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:315:12
           144: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:279:20
           145: enter_context<rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:57:9
           146: {closure#0}<(rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:161:13
           147: {closure#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:112:9
           148: {closure#0}<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:36
           149: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:79:18
           150: with_context<rustc_middle::ty::context::tls::with_related_context::{closure_env#0}<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:90:5
           151: with_related_context<rustc_query_impl::plumbing::{impl#3}::start_query::{closure_env#0}<(rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:103:5
           152: start_query<(rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex), rustc_query_system::query::plumbing::execute_job_incr::{closure_env#2}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:147:9
           153: execute_job_incr<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:539:40
           154: execute_job<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:420:9
           155: try_execute_query<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:372:13
           156: {closure#0}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:842:9
           157: maybe_grow<(rustc_middle::query::erase::Erased<[u8; 0]>, core::option::Option<rustc_query_system::dep_graph::graph::DepNodeIndex>), rustc_query_system::query::plumbing::get_query_incr::{closure_env#0}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stacker-0.1.21/src/lib.rs:57:9
           158: ensure_sufficient_stack<(rustc_middle::query::erase::Erased<[u8; 0]>, core::option::Option<rustc_query_system::dep_graph::graph::DepNodeIndex>), rustc_query_system::query::plumbing::get_query_incr::{closure_env#0}<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>>
                       at /Users/timch/rust/compiler/rustc_data_structures/src/stack.rs:21:5
           159: get_query_incr<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt>
                       at /Users/timch/rust/compiler/rustc_query_system/src/query/plumbing.rs:841:36
           160: __rust_end_short_backtrace
                       at /Users/timch/rust/compiler/rustc_query_impl/src/plumbing.rs:611:21
           161: query_ensure<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>>
                       at /Users/timch/rust/compiler/rustc_middle/src/query/plumbing.rs:198:9
           162: analysis
                       at /Users/timch/rust/compiler/rustc_middle/src/query/plumbing.rs:233:9
           163: {closure#2}
                       at /Users/timch/rust/compiler/rustc_driver_impl/src/lib.rs:370:29
           164: {closure#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>
                       at /Users/timch/rust/compiler/rustc_interface/src/passes.rs:1007:27
           165: {closure#1}<rustc_interface::passes::create_and_enter_global_ctxt::{closure#2}::{closure_env#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>, core::option::Option<rustc_interface::queries::Linker>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context.rs:1588:37
           166: {closure#0}<rustc_middle::ty::context::{impl#21}::enter::{closure_env#1}<rustc_interface::passes::create_and_enter_global_ctxt::{closure#2}::{closure_env#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>, core::option::Option<rustc_interface::queries::Linker>>, core::option::Option<rustc_interface::queries::Linker>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:60:9
           167: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_middle::ty::context::{impl#21}::enter::{closure_env#1}<rustc_interface::passes::create_and_enter_global_ctxt::{closure#2}::{closure_env#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>, core::option::Option<rustc_interface::queries::Linker>>, core::option::Option<rustc_interface::queries::Linker>>, core::option::Option<rustc_interface::queries::Linker>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:315:12
           168: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_middle::ty::context::{impl#21}::enter::{closure_env#1}<rustc_interface::passes::create_and_enter_global_ctxt::{closure#2}::{closure_env#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>, core::option::Option<rustc_interface::queries::Linker>>, core::option::Option<rustc_interface::queries::Linker>>, core::option::Option<rustc_interface::queries::Linker>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/local.rs:279:20
           169: enter_context<rustc_middle::ty::context::{impl#21}::enter::{closure_env#1}<rustc_interface::passes::create_and_enter_global_ctxt::{closure#2}::{closure_env#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>, core::option::Option<rustc_interface::queries::Linker>>, core::option::Option<rustc_interface::queries::Linker>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context/tls.rs:57:9
           170: enter<rustc_interface::passes::create_and_enter_global_ctxt::{closure#2}::{closure_env#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>, core::option::Option<rustc_interface::queries::Linker>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context.rs:1588:9
           171: create_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_interface::passes::create_and_enter_global_ctxt::{closure#2}::{closure_env#0}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>>
                       at /Users/timch/rust/compiler/rustc_middle/src/ty/context.rs:1793:13
           172: {closure#2}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>
                       at /Users/timch/rust/compiler/rustc_interface/src/passes.rs:974:9
           173: call_once<rustc_interface::passes::create_and_enter_global_ctxt::{closure_env#2}<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>, (&rustc_session::session::Session, rustc_middle::ty::context::CurrentGcx, alloc::sync::Arc<rustc_data_structures::jobserver::Proxy, alloc::alloc::Global>, &std::sync::once_lock::OnceLock<rustc_middle::ty::context::GlobalCtxt>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_middle::arena::Arena>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_hir::Arena>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2})>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/ops/function.rs:253:5
           174: call_once<(&rustc_session::session::Session, rustc_middle::ty::context::CurrentGcx, alloc::sync::Arc<rustc_data_structures::jobserver::Proxy, alloc::alloc::Global>, &std::sync::once_lock::OnceLock<rustc_middle::ty::context::GlobalCtxt>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_middle::arena::Arena>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_hir::Arena>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}), dyn core::ops::function::FnOnce<(&rustc_session::session::Session, rustc_middle::ty::context::CurrentGcx, alloc::sync::Arc<rustc_data_structures::jobserver::Proxy, alloc::alloc::Global>, &std::sync::once_lock::OnceLock<rustc_middle::ty::context::GlobalCtxt>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_middle::arena::Arena>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_hir::Arena>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}), Output=core::option::Option<rustc_interface::queries::Linker>>, alloc::alloc::Global>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/alloc/src/boxed.rs:1971:9
           175: create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure_env#2}>
                       at /Users/timch/rust/compiler/rustc_interface/src/passes.rs:1015:5
           176: {closure#0}
                       at /Users/timch/rust/compiler/rustc_driver_impl/src/lib.rs:343:22
           177: {closure#0}<(), rustc_driver_impl::run_compiler::{closure_env#0}>
                       at /Users/timch/rust/compiler/rustc_interface/src/interface.rs:527:80
           178: call_once<(), rustc_interface::interface::run_compiler::{closure#1}::{closure_env#0}<(), rustc_driver_impl::run_compiler::{closure_env#0}>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/panic/unwind_safe.rs:272:9
           179: do_call<core::panic::unwind_safe::AssertUnwindSafe<rustc_interface::interface::run_compiler::{closure#1}::{closure_env#0}<(), rustc_driver_impl::run_compiler::{closure_env#0}>>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panicking.rs:589:40
           180: catch_unwind<(), core::panic::unwind_safe::AssertUnwindSafe<rustc_interface::interface::run_compiler::{closure#1}::{closure_env#0}<(), rustc_driver_impl::run_compiler::{closure_env#0}>>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panicking.rs:552:19
           181: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<rustc_interface::interface::run_compiler::{closure#1}::{closure_env#0}<(), rustc_driver_impl::run_compiler::{closure_env#0}>>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panic.rs:359:14
           182: {closure#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>
                       at /Users/timch/rust/compiler/rustc_interface/src/interface.rs:527:23
           183: {closure#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>
                       at /Users/timch/rust/compiler/rustc_interface/src/util.rs:201:17
           184: {closure#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>
                       at /Users/timch/rust/compiler/rustc_interface/src/util.rs:155:24
           185: set<rustc_span::SessionGlobals, rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>
                       at /Users/timch/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/scoped-tls-1.0.1/src/lib.rs:137:9
           186: create_session_globals_then<(), rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>>
                       at /Users/timch/rust/compiler/rustc_span/src/lib.rs:146:21
           187: {closure#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>
                       at /Users/timch/rust/compiler/rustc_interface/src/util.rs:151:17
           188: __rust_begin_short_backtrace<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/sys/backtrace.rs:158:18
           189: {closure#0}<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/mod.rs:559:17
           190: call_once<(), std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/panic/unwind_safe.rs:272:9
           191: do_call<core::panic::unwind_safe::AssertUnwindSafe<std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panicking.rs:589:40
           192: catch_unwind<(), core::panic::unwind_safe::AssertUnwindSafe<std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>>>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panicking.rs:552:19
           193: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/panic.rs:359:14
           194: {closure#1}<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/thread/mod.rs:557:30
           195: call_once<std::thread::{impl#0}::spawn_unchecked_::{closure_env#1}<rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<(), rustc_driver_impl::run_compiler::{closure_env#0}>, ()>, ()>, ()>, ()>
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/core/src/ops/function.rs:253:5
           196: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/alloc/src/boxed.rs:1971:9
           197: std::sys::pal::unix::thread::Thread::new::thread_start
                       at /rustc/788da80fcfcef3f34c90def5baa32813e39a1a41/library/std/src/sys/pal/unix/thread.rs:107:17
           198: __pthread_cond_wait
          

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: please make sure that you have updated to the latest nightly

note: please attach the file at `/Users/timch/foo/rustc-ice-2025-09-09T09_35_23-12039.txt` to your bug report

note: compiler flags: --crate-type lib -C embed-bitcode=no -C debuginfo=2 -C split-debuginfo=unpacked -C incremental=[REDACTED]

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
end of query stack
error: could not compile `foo` (lib)

Caused by:
  process didn't exit successfully: `/Users/timch/.rustup/toolchains/stage1/bin/rustc --crate-name foo --edition=2024 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 -C split-debuginfo=unpacked --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values())' -C metadata=4f411d5d4ff7091d -C extra-filename=-3354fe6455a5e603 --out-dir /Users/timch/foo/target/debug/deps -C incremental=/Users/timch/foo/target/debug/incremental -L dependency=/Users/timch/foo/target/debug/deps` (exit status: 101)

@Jules-Bertholet
Copy link
Contributor Author

The following code ICEs with this PR:

It’s a pre-existing issue, this PR only makes it very slightly easier to trigger: #146371

@Jules-Bertholet
Copy link
Contributor Author

Jules-Bertholet commented Sep 9, 2025

This PR proposes to remove E0719 from the compiler, accepting code that used to be forbidden by it.

E0719 forbids constraining the same associated item twice within the same angle-bracket delimited associated item bound list (the inside T: Trait<…>). For example, the following are forbidden:

Forbidden Working alternative
T: Trait<Gat<u32> = u32, Gat<u64> = u64> T: Trait<Gat<u32> = u32> + Trait<Gat<u64> = u64>
T: Iterator<Item = u32, Item = i32> T: Iterator<Item = u32> + Iterator<Item = i32> (trivially false)
T: Iterator<Item = u32, Item = u32> T: Iterator<Item = u32>
T: Iterator<Item: Send, Item: Sync> T: Iterator<Item: Send + Sync>
T: Trait<ASSOC = 3, ASSOC = 4> T: Trait<ASSOC = 3> + Trait<ASSOC = 4> (trivially false)
T: Trait<ASSOC = 3, ASSOC = 3> T: Trait<ASSOC = 3>

With this PR, all those previously forbidden examples would start working, as well as their APIT and RPIT equivalents.

Types like dyn Iterator<Item = u32, Item = u32> would also start to be accepted, and considered equivalent to their non-redundant forms (i.e. dyn Iterator<Item = u32>). However, dyn Iterator<Item = u32, Item = i32>, and other dyn types corresponding to impossible bounds, would continue to be rejected as before.

N.B., the following works today:

trait Sup {
    type Assoc;
}

trait Sub: Sup<Assoc = u32> {}

// `Foo: Sub` doesn't hold
type Foo = dyn Sub<Assoc = i32>;

Arguably, this is inconsistent, and we might want to change it in the future—either by rejecting the snippet, or by accepting dyn Iterator<Item = u32, Item = i32>. But this PR leaves it alone for now.

Alternatives

We could try to adopt a more complex rule that accepts only the truly useful cases (like the first entry in the table above) while rejecting everything else. However, I don’t see the point of adding all that extra complexity to the compiler and language specification. The extra permissiveness could also be useful for macros.

@traviscross
Copy link
Contributor

Makes sense to me. This change to the language has the virtue of making the Reference more correct.

@rfcbot fcp merge

@rust-rfcbot
Copy link
Collaborator

rust-rfcbot commented Sep 10, 2025

Team member @traviscross has proposed to merge this. The next step is review by the rest of the tagged team members:

Concerns:

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns.
See this document for info about what commands tagged team members can give me.

@rust-rfcbot rust-rfcbot added proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. labels Sep 10, 2025
@lcnr
Copy link
Contributor

lcnr commented Sep 10, 2025

Given that T: Iterator<Item = u32> + Iterator<Item = u64> is already allowed, this doesn't matter on the T-types side

From a UX perspective I would expect that T: Iterator<Item = u32, Item = u64> at least results in a lint however.

The behavior with trait objects is a bit more interesting on the T-types side and I kind of would like to keep erroring for them.

would also start to be accepted, and considered equivalent to their non-redundant forms

This seems... subtle and somewhat undesirable. I do think T-types should be involved there.

You've got the following test

    assert_eq!(
        TypeId::of::<dyn Iterator<Item = u32>>(),
        TypeId::of::<dyn Iterator<Item = u32, Item = u32>>()
    );

What happens for dyn Iterator<Item = for<'a> fn(&'a ()), Item = for<'b> fn(&'b ())>, or for dyn Iterator<Item = u32, Item = <u32 as Id>::This>?

We no longer merge duplicate projection bounds for trait objects after lowering since #136458, so if we fail to merge them during HIR type lowering, dyn Iterator<Item = for<'a> fn(&'a ()), Item = for<'b> fn(&'b ())> and dyn Iterator<Item = for<'c> fn(&'c ())> would end up being different types.

If dyn Iterator<Item = for<'a> fn(&'a ()), Item = for<'b> fn(&'b ())> is supported and usable, then we'll also have a subtle behavior difference between old and new solver. THe old trait solver always chooses earlier projection candidates, so it'd always normalize to for<'a> fn(&'a ()) here? The new solver instead considers all of them equally and merges them if they have the same result. It seems difficult to write a test for this but at least in theory normalizing one of the projection bounds could result in different - but irrelevant - lifetime constraints, causing the new solver to fail with ambiguity while the old one succeeds.

@traviscross
Copy link
Contributor

@rfcbot concern dyn-question

Filing a concern pending the answer to @lcnr's question.

@tmandry
Copy link
Member

tmandry commented Sep 10, 2025

From a UX perspective I would expect that T: Iterator<Item = u32, Item = u64> at least results in a lint however.

I agree with this. I don't think it needs to block necessarily.

+1 for the overall idea, modulo the concern about dyn.

@rfcbot reviewed

@Jules-Bertholet
Copy link
Contributor Author

What happens for dyn Iterator<Item = for<'a> fn(&'a ()), Item = for<'b> fn(&'b ())>, or for dyn Iterator<Item = u32, Item = <u32 as Id>::This>?

It seems that these end up being rejected by the same check that rejects dyn Iterator<Item = u32, Item = u64>.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. I-lang-nominated Nominated for discussion during a lang team meeting. needs-fcp This change is insta-stable, or significant enough to need a team FCP to proceed. P-lang-drag-1 Lang team prioritization drag level 1. https://rust-lang.zulipchat.com/#narrow/channel/410516-t-lang proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-lang Relevant to the language team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Can't specify multiple associated type bindings for same GAT even if args differ