Skip to content

Improved handling for cycles within the query system itself#154387

Open
jyn514 wants to merge 4 commits intorust-lang:mainfrom
ferrocene:jyn/query-cycles
Open

Improved handling for cycles within the query system itself#154387
jyn514 wants to merge 4 commits intorust-lang:mainfrom
ferrocene:jyn/query-cycles

Conversation

@jyn514
Copy link
Member

@jyn514 jyn514 commented Mar 25, 2026

This PR is somewhat complicated and I don't expect it to merge as-is. Let me start with a motivating example. The following rustc-driver worked fine a week ago:

struct Driver;

impl Callbacks for Driver {
    fn config(&mut self, config: &mut interface::Config) {
        config.override_queries = Some(|_sess, providers| {
            providers.queries.codegen_fn_attrs = |tcx, def_id| {
                let _ = tcx.hir_crate_items(());
                (rustc_interface::DEFAULT_QUERY_PROVIDERS.queries.codegen_fn_attrs)(tcx, def_id)
            };
        });

    }
}

fn main() -> ExitCode {
    rustc_driver::install_ice_hook("https://github.com/ferrocene/ferrocene/issues/new", |_| ());
    let handler = EarlyDiagCtxt::new(ErrorOutputType::default());
    rustc_driver::init_rustc_env_logger(&handler);
    rustc_driver::catch_with_exit_code(move || {
        let args: Vec<String> = std::env::args().collect();
        rustc_driver::run_compiler(&args, &mut Driver)
    })
}

Since #153489 merged, it hangs indefinitely trying to compile the following program (reduced from tests/ui/delegation/bad-resolve):

#![feature(fn_delegation)]
#![allow(incomplete_features)]

trait Trait {
    type Type;
    fn bar() {}
}

struct F;
impl Trait for F {
    type Type = i32;
}

struct S(F);
impl Trait for S {
    reuse <F as Trait>::bar;
}

fn main() {}

I'll step through how this program behaves on each commit in this PR.


  1. Main branch: Hangs indefinitely with no output.

  2. After first commit (adding safeguards to ensure_sufficient_stack):
    a. First, it prints a stacktrace that cuts off early
    b. Then it hangs forever.

  3. After calling abort if ensure_sufficient_stack fails:
    a. First, it prints a ~250 frame stacktrace,
    including both the first and last hundred frames.
    b. Then it exits.

  4. After adding debug logging, shows the stack trace from above, but first:
    a. Prints a trace of the query execution
    b. Shows the stacktrace from above.

  5. After the bug fix: as above, but instead of the 5 million frame backtrace, prints a "more normal" query cycle:

error[E0391]: cycle detected when looking up span for `<impl at bad-resolve.rs:15:1: 15:17>::bar`
  |
  = note: ...which requires getting HIR ID of `<impl at bad-resolve.rs:15:1: 15:17>::bar`...
  = note: ...which again requires looking up span for `<impl at bad-resolve.rs:15:1: 15:17>::bar`, completing the cycle
note: cycle used when computing codegen attributes of `Trait::bar`
 --> bad-resolve.rs:6:5
  |
6 |     fn bar() {}
  |     ^^^^^^^^

Here's an extract of that query trace:

Details
rustc_query_impl::execution::try_execute_query query="hir_crate_items"
  ...
  rustc_query_impl::execution::try_execute_query query="lower_delayed_owner"
    ...
    rustc_query_impl::execution::try_execute_query query="codegen_fn_attrs"
      rustc_query_impl::execution::try_execute_query query="hir_crate_items"
        0ms INFO rustc_query_impl::execution hit a query cycle evaluating hir_crate_items!
          rustc_query_impl::execution::try_execute_query query="def_span"
            rustc_query_impl::execution::try_execute_query query="local_def_id_to_hir_id"
              rustc_query_impl::execution::try_execute_query query="lower_delayed_owner"
                0ms INFO rustc_query_impl::execution hit a query cycle evaluating lower_delayed_owner!
                  rustc_query_impl::execution::try_execute_query query="def_span"
                    0ms INFO rustc_query_impl::execution hit a query cycle evaluating def_span!
                    rustc_query_impl::execution::try_execute_query query="def_span"
...

I feel somewhat strongly that there is a bug here; it should not be possible to get query cycles within def_span.
In particular, note that the first two cycles are ignored altogether in order to report the
third cycle; that seems quite bad!

I'm not sure if the bug is in the implementation of lower_delayed_owner, in the query system, or merely in the fact that lower_delay_owner is a prerequisite of hir_items; I'm opening this PR to get more feedback on that. However, I think the commits here stand on their own.

In #153979 (comment) I mistakenly attributed this to recent refactors in the query system; I no longer think that's true, I think the infinite loop is a latent bug that's been around for years, and the new query cycle is related to lower_delayed_owner, not the query system itself.

cc @petrochenkov @aerooneqq @Zalathar

jyn514 added 4 commits March 25, 2026 18:43
Something has definitely gone wrong at this point. This is over 5
million stack frames, certainly more than we'd ever hit in successful
code. It's actually too many stack frames for the default panic handler,
or GDB, or LLDB, to print. Instead add a manual stack overflow handler
which only prints the first and last hundred stack frames.

We can't even have a normal `println!("{backtrace}")` because
symbolizing that many frames too long. Instead, resolve the frame
lazily.
This shows the following stack trace:
```
still not enough stack after 1000 expansions of dynamic stack; infinite recursion?
first hundred frames:
0: trace
		at /Users/jyn/.local/lib/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/backtrace/libunwind.rs:117:9
1: trace_unsynchronized<backtrace::capture::{impl#4}::create::{closure_env#0}>
		at /Users/jyn/.local/lib/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/backtrace/mod.rs:66:14
2: trace<backtrace::capture::{impl#4}::create::{closure_env#0}>
		at /Users/jyn/.local/lib/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/backtrace/mod.rs:53:14
3: create
		at /Users/jyn/.local/lib/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/capture.rs:294:9
4: report_too_much_stack
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:68:21
5: call_once<fn() -> !, ()>
		at /Users/jyn/work/rust-upstream/library/core/src/ops/function.rs:250:5
6: ___rust_try
		at <unknown>
7: catch_unwind<!, fn() -> !>
		at /Users/jyn/work/rust-upstream/library/std/src/panicking.rs:544:19
8: catch_unwind<fn() -> !, !>
		at /Users/jyn/work/rust-upstream/library/std/src/panic.rs:359:14
9: too_much_stack
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:54:18
10: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:44:13
11: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
12: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
13: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
14: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
15: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
16: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
17: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
18: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
19: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
20: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
21: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
22: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
23: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
24: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
25: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
26: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
27: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
28: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
29: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
30: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
31: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
32: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
33: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
34: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
35: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
36: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
37: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
38: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
39: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
40: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
41: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
42: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
43: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
44: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
45: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
46: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
47: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
48: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
49: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
50: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
51: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
52: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
53: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
54: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
55: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
56: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
57: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
58: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
59: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
60: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
61: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
62: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
63: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
64: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
65: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
66: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
67: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
68: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
69: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
70: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
71: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
72: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
73: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
74: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
75: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
76: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
77: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
78: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
79: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
80: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
81: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
82: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
83: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
84: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
85: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
86: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
87: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
88: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
89: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
90: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
91: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
92: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
93: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
94: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
95: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
96: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
97: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
98: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
99: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
100: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
101: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
102: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
103: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
104: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
105: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
106: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
107: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
108: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
109: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
110: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
111: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
112: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
113: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
114: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
115: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
116: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
117: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
118: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
119: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
120: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
121: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
122: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
123: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
124: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
125: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
126: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
127: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
128: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
129: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
130: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
131: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
132: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
133: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
134: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
135: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
136: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
137: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
138: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
139: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
140: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
141: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
142: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
143: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
144: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
145: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
146: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
147: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
148: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
149: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
150: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
151: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
152: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
153: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
154: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
155: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
156: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
157: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
158: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
...
last hundred frames:
4637037: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
4637038: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
4637039: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
4637040: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637041: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637042: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637043: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637044: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637045: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637046: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637047: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
4637048: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
4637049: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
4637050: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
4637051: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
4637052: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
4637053: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
4637054: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637055: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637056: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637057: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637058: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637059: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637060: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637061: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
4637062: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
4637063: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
4637064: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
4637065: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
4637066: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
4637067: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
4637068: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637069: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637070: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637071: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637072: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637073: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637074: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637075: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
4637076: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
4637077: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
4637078: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
4637079: handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
4637080: find_and_handle_cycle<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
4637081: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
4637082: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637083: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637084: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637085: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637086: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637087: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637088: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637089: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
4637090: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
4637091: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
4637092: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:460:37
4637093: handle_cycle<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
4637094: find_and_handle_cycle<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
4637095: try_execute_query<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
4637096: {closure#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637097: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637098: execute_query_non_incr_inner<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637099: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637100: query_ensure_ok_or_done<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:63:13
4637101: lower_delayed_owner<rustc_span::def_id::LocalDefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:621:21
4637102: owner
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/hir/mod.rs:73:31
4637103: {closure#0}
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/hir/mod.rs:475:78
4637104: call_once<rustc_middle::hir::provide::{closure_env#0}, (rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>
		at /Users/jyn/work/rust-upstream/library/core/src/ops/function.rs:250:5
4637105: __rust_begin_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:116:46
4637106: {closure#0}<rustc_data_structures::vec_cache::VecCache<rustc_hir_id::OwnerId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:399:59
4637107: {closure#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_hir_id::OwnerId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:56:9
4637108: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_hir_id::OwnerId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:462:12
4637109: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_hir_id::OwnerId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:426:20
4637110: enter_context<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:53:9
4637111: {closure#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/plumbing.rs:74:9
4637112: {closure#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:36
4637113: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:75:18
4637114: with_context<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:5
4637115: start_query<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/plumbing.rs:61:5
4637116: execute_job_non_incr<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:399:17
4637117: try_execute_query<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:307:17
4637118: {closure#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637119: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637120: execute_query_non_incr_inner<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637121: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637122: query_get_at<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637123: local_def_id_to_hir_id<rustc_span::def_id::LocalDefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637124: local_def_id_to_hir_id<rustc_span::def_id::LocalDefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637125: {closure#5}
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/hir/mod.rs:488:57
4637126: call_once<rustc_middle::hir::provide::{closure_env#5}, (rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>
		at /Users/jyn/work/rust-upstream/library/core/src/ops/function.rs:250:5
4637127: __rust_begin_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:110:29
4637128: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:399:59
4637129: {closure#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:56:9
4637130: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:462:12
4637131: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:426:20
4637132: enter_context<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:53:9
4637133: {closure#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/plumbing.rs:74:9
4637134: {closure#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:36
4637135: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:75:18
4637136: with_context<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:5
4637137: start_query<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/plumbing.rs:61:5
4637138: execute_job_non_incr<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:399:17
4637139: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:307:17
4637140: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637141: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637142: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637143: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637144: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637145: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637146: def_span<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637147: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:141:13
4637148: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/keys.rs:129:26
4637149: default_span
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:448:29
4637150: create_cycle_error
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/job.rs:474:37
4637151: handle_cycle<rustc_middle::query::caches::SingleCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:117:17
4637152: find_and_handle_cycle<rustc_middle::query::caches::SingleCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:211:6
4637153: try_execute_query<rustc_middle::query::caches::SingleCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:337:25
4637154: {closure#0}<rustc_middle::query::caches::SingleCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637155: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::SingleCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637156: execute_query_non_incr_inner<rustc_middle::query::caches::SingleCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637157: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637158: rustc_middle[95cb20ab0b0ff780]::query::inner::query_get_at::<rustc_middle[95cb20ab0b0ff780]::query::caches::SingleCache<rustc_middle[95cb20ab0b0ff780]::query::erase::ErasedData<[u8; 8usize]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637159: <rustc_middle[95cb20ab0b0ff780]::query::plumbing::TyCtxtAt>::hir_crate_items
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637160: <rustc_middle[95cb20ab0b0ff780]::ty::context::TyCtxt>::hir_crate_items
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637161: <loopy[71142d0964a78a85]::Driver as rustc_driver_impl[28dd62d9dde0f1b4]::Callbacks>::config::{closure#0}::{closure#0}
		at /Users/jyn/work/loopy/src/main.rs:20:29
4637162: <<loopy[71142d0964a78a85]::Driver as rustc_driver_impl[28dd62d9dde0f1b4]::Callbacks>::config::{closure#0}::{closure#0} as core[d920faf4c96bc488]::ops::function::FnOnce<(rustc_middle[95cb20ab0b0ff780]::ty::context::TyCtxt, rustc_span[e4b3c3db7c294ad9]::def_id::LocalDefId)>>::call_once
		at /Users/jyn/work/rust-upstream/library/core/src/ops/function.rs:250:5
4637163: __rust_begin_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:110:29
4637164: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:399:59
4637165: {closure#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:56:9
4637166: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:462:12
4637167: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:426:20
4637168: enter_context<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:53:9
4637169: {closure#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/plumbing.rs:74:9
4637170: {closure#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:36
4637171: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:75:18
4637172: with_context<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>, rustc_middle::query::erase::ErasedData<[u8; 8]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:5
4637173: start_query<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/plumbing.rs:61:5
4637174: execute_job_non_incr<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:399:17
4637175: try_execute_query<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>, false>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:307:17
4637176: {closure#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:32
4637177: ensure_sufficient_stack<rustc_middle::query::erase::ErasedData<[u8; 8]>, rustc_query_impl::execution::execute_query_non_incr_inner::{closure_env#0}<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_data_structures/src/stack.rs:40:9
4637178: execute_query_non_incr_inner<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:600:5
4637179: __rust_end_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:80:30
4637180: query_get_at<rustc_middle::query::caches::DefIdCache<rustc_middle::query::erase::ErasedData<[u8; 8]>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/inner.rs:45:17
4637181: codegen_fn_attrs<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:572:46
4637182: codegen_fn_attrs<rustc_span::def_id::DefId>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/query/plumbing.rs:560:39
4637183: lower_delegation_sig<rustc_ast_lowering::ResolverDelayedAstLowering>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/delegation.rs:334:33
4637184: lower_delegation<rustc_ast_lowering::ResolverDelayedAstLowering>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/delegation.rs:162:32
4637185: lower_impl_item<rustc_ast_lowering::ResolverDelayedAstLowering>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/item.rs:1296:47
4637186: lower_assoc_item<rustc_ast_lowering::ResolverDelayedAstLowering>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/item.rs:770:47
4637187: {closure#2}<rustc_ast_lowering::ResolverDelayedAstLowering>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/item.rs:115:57
4637188: {closure#0}<rustc_ast_lowering::ResolverDelayedAstLowering, rustc_ast_lowering::item::{impl#1}::lower_node::{closure_env#2}<rustc_ast_lowering::ResolverDelayedAstLowering>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/item.rs:84:46
4637189: with_hir_id_owner<rustc_ast_lowering::ResolverDelayedAstLowering, rustc_ast_lowering::item::{impl#1}::with_lctx::{closure_env#0}<rustc_ast_lowering::ResolverDelayedAstLowering, rustc_ast_lowering::item::{impl#1}::lower_node::{closure_env#2}<rustc_ast_lowering::ResolverDelayedAstLowering>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/lib.rs:803:20
4637190: with_lctx<rustc_ast_lowering::ResolverDelayedAstLowering, rustc_ast_lowering::item::{impl#1}::lower_node::{closure_env#2}<rustc_ast_lowering::ResolverDelayedAstLowering>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/item.rs:84:14
4637191: lower_node<rustc_ast_lowering::ResolverDelayedAstLowering>
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/item.rs:115:26
4637192: lower_delayed_owner
		at /Users/jyn/work/rust-upstream/compiler/rustc_ast_lowering/src/lib.rs:679:13
4637193: __rust_begin_short_backtrace
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/query_impl.rs:116:46
4637194: {closure#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/execution.rs:399:59
4637195: {closure#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:56:9
4637196: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:462:12
4637197: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>
		at /Users/jyn/work/rust-upstream/library/std/src/thread/local.rs:426:20
4637198: enter_context<rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:53:9
4637199: {closure#0}<rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_query_impl/src/plumbing.rs:74:9
4637200: {closure#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:36
4637201: with_context_opt<rustc_middle::ty::context::tls::with_context::{closure_env#0}<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:75:18
4637202: with_context<rustc_query_impl::plumbing::start_query::{closure_env#0}<rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_query_impl::execution::execute_job_non_incr::{closure_env#0}<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_middle::dep_graph::graph::DepNodeIndex>>>, rustc_middle::query::erase::ErasedData<[u8; 0]>>
		at /Users/jyn/work/rust-upstream/compiler/rustc_middle/src/ty/context/tls.rs:86:5
4637203: start_query<rustc_middle::query::erase::ErasedData<[u8; 0]>, rustc_query_impl::execution::exec…
```
rustc_query_impl::execution::try_execute_query query="hir_crate_items"
  ...
  rustc_query_impl::execution::try_execute_query query="lower_delayed_owner"
    ...
    rustc_query_impl::execution::try_execute_query query="asyncness"
    rustc_query_impl::execution::try_execute_query query="codegen_fn_attrs"
      rustc_query_impl::execution::try_execute_query query="hir_crate_items"
        0ms INFO rustc_query_impl::execution hit a query cycle evaluating hir_crate_items!
        rustc_middle::queries::default_span self=hir_crate_items(())
        rustc_middle::queries::default_span self=lower_delayed_owner(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
          rustc_query_impl::execution::try_execute_query query="def_span"
            rustc_query_impl::execution::try_execute_query query="local_def_id_to_hir_id"
              rustc_query_impl::execution::try_execute_query query="lower_delayed_owner"
                0ms INFO rustc_query_impl::execution hit a query cycle evaluating lower_delayed_owner!
                rustc_middle::queries::default_span self=lower_delayed_owner(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
                  rustc_query_impl::execution::try_execute_query query="def_span"
                    0ms INFO rustc_query_impl::execution hit a query cycle evaluating def_span!
                    rustc_middle::queries::default_span self=def_span(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
                    rustc_query_impl::execution::try_execute_query query="def_span"
                      rustc_query_impl::execution::try_execute_query query="local_def_id_to_hir_id"
                      rustc_query_impl::execution::try_execute_query query="opt_hir_owner_nodes"
                    rustc_middle::queries::default_span self=local_def_id_to_hir_id(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
                      rustc_query_impl::execution::try_execute_query query="def_span"
```
WIP: desc

```
     rustc_query_impl::execution::try_execute_query query="lower_delayed_owner"
       rustc_query_impl::execution::try_execute_query query="local_def_id_to_hir_id"
       rustc_query_impl::execution::try_execute_query query="hir_attr_map"
       rustc_query_impl::execution::try_execute_query query="associated_item"
         rustc_query_impl::execution::try_execute_query query="opt_hir_owner_nodes"
         rustc_query_impl::execution::try_execute_query query="fn_arg_idents"
       rustc_query_impl::execution::try_execute_query query="fn_sig"
         rustc_query_impl::execution::try_execute_query query="late_bound_vars_map"
           rustc_query_impl::execution::try_execute_query query="resolve_bound_vars"
       rustc_query_impl::execution::try_execute_query query="generics_of"
         rustc_query_impl::execution::try_execute_query query="local_def_id_to_hir_id"
         rustc_query_impl::execution::try_execute_query query="opt_hir_owner_nodes"
         rustc_query_impl::execution::try_execute_query query="generics_of"
       rustc_query_impl::execution::try_execute_query query="asyncness"
       rustc_query_impl::execution::try_execute_query query="codegen_fn_attrs"
         rustc_query_impl::execution::try_execute_query query="hir_crate_items"
           0ms INFO rustc_query_impl::execution hit a query cycle evaluating hir_crate_items!
           rustc_middle::queries::default_span self=hir_crate_items(())
           rustc_middle::queries::default_span self=lower_delayed_owner(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
             rustc_query_impl::execution::try_execute_query query="def_span"
               rustc_query_impl::execution::try_execute_query query="local_def_id_to_hir_id"
                 rustc_query_impl::execution::try_execute_query query="lower_delayed_owner"
                   0ms INFO rustc_query_impl::execution hit a query cycle evaluating lower_delayed_owner!
                   rustc_middle::queries::default_span self=lower_delayed_owner(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
                     rustc_query_impl::execution::try_execute_query query="def_span"
                       0ms INFO rustc_query_impl::execution hit a query cycle evaluating def_span!
                       rustc_middle::queries::default_span self=def_span(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
                       rustc_query_impl::execution::try_execute_query query="def_span"
                         rustc_query_impl::execution::try_execute_query query="local_def_id_to_hir_id"
                         rustc_query_impl::execution::try_execute_query query="opt_hir_owner_nodes"
                       rustc_middle::queries::default_span self=local_def_id_to_hir_id(DefId(0:14 ~ bad_resolve[0a7b]::{impl#1}::bar))
                       rustc_middle::queries::default_span self=codegen_fn_attrs(DefId(0:5 ~ bad_resolve[0a7b]::Trait::bar))
                         rustc_query_impl::execution::try_execute_query query="def_span"
error[E0391]: cycle detected when looking up span for `<impl at bad-resolve.rs:15:1: 15:17>::bar`
  |
  = note: ...which requires getting HIR ID of `<impl at bad-resolve.rs:15:1: 15:17>::bar`...
  = note: ...which again requires looking up span for `<impl at bad-resolve.rs:15:1: 15:17>::bar`, completing the cycle
note: cycle used when computing codegen attributes of `Trait::bar`
 --> bad-resolve.rs:6:5
  |
6 |     fn bar() {}
  |     ^^^^^^^^
```
@rustbot
Copy link
Collaborator

rustbot commented Mar 25, 2026

These commits modify the Cargo.lock file. Unintentional changes to Cargo.lock can be introduced when switching branches and rebasing PRs.

If this was unintentional then you should revert the changes before this PR is merged.
Otherwise, you can ignore this comment.

The list of allowed third-party dependencies may have been modified! You must ensure that any new dependencies have compatible licenses before merging.

cc @davidtwco, @wesleywiser

@rustbot rustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) A-tidy Area: The tidy tool S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@rustbot
Copy link
Collaborator

rustbot commented Mar 25, 2026

r? @JohnTitor

rustbot has assigned @JohnTitor.
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

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@jyn514
Copy link
Member Author

jyn514 commented Mar 25, 2026

hm. maybe r? @Zalathar ?

@rustbot rustbot assigned Zalathar and unassigned JohnTitor Mar 25, 2026
@rustbot
Copy link
Collaborator

rustbot commented Mar 25, 2026

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

@rust-log-analyzer
Copy link
Collaborator

The job aarch64-gnu-llvm-21-1 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
##[endgroup]
Executing "/scripts/stage_2_test_set1.sh"
+ /scripts/stage_2_test_set1.sh
+ '[' 1 == 1 ']'
+ echo 'PR_CI_JOB set; skipping tidy'
+ SKIP_TIDY='--skip tidy'
+ ../x.py --stage 2 test --skip tidy --skip compiler --skip src
PR_CI_JOB set; skipping tidy
##[group]Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.04s
##[endgroup]
---
To only update this specific test, also pass `--test-args query-system/query-cycle-printing-issue-151358.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/query-system/query-cycle-printing-issue-151358.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/query-system/query-cycle-printing-issue-151358" "-A" "unused" "-W" "unused_attributes" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers"
stdout: none
--- stderr -------------------------------
error[E0391]: cycle detected when getting the resolver for lowering
   |
   = note: ...which requires getting HIR ID of `Default`...
---
To only update this specific test, also pass `--test-args resolve/query-cycle-issue-124901.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/resolve/query-cycle-issue-124901.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/resolve/query-cycle-issue-124901" "-A" "unused" "-W" "unused_attributes" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers"
stdout: none
--- stderr -------------------------------
error[E0391]: cycle detected when getting the resolver for lowering
   |
   = note: ...which requires getting HIR ID of `Default`...

@Zoxc
Copy link
Contributor

Zoxc commented Mar 25, 2026

Not sure about the query related changes here, but it makes sense to have proper stack limit so we don't OOM with infinite recursion.

const STACK_PER_RECURSION: usize = 16 * 1024 * 1024; // 16MB

thread_local! {
static TIMES_GROWN: AtomicU16 = const { AtomicU16::new(0) };
Copy link
Member

Choose a reason for hiding this comment

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

This can just be Cell<u16>, right?

let out = stacker::grow(STACK_PER_RECURSION, f);
TIMES_GROWN.with(|times| times.fetch_sub(1, Ordering::Relaxed));
out
}
Copy link
Member

Choose a reason for hiding this comment

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

I'm pretty sure this new implementation breaks on targets where stacker uses the default impl of not growing the stack. There remaining_stack would return None and thus on ever recursion TIMES_GROWN would be increased, only allowing a 1000x recursion rather than 1000 * however many recursions a single stack segment fits.

@Zoxc
Copy link
Contributor

Zoxc commented Mar 25, 2026

@jyn514 You could try your test failures with #154389. We have some failing tests on main which that detects and the cause might be similar.

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

Labels

A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) A-tidy Area: The tidy tool S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants