Rustc panics at free_region_relations.rs:93:9: "can't find an upper bound!?" · Issue #139004 · rust-lang/rust (original) (raw)

The compiler panics for the following code.

thread 'rustc' panicked at compiler/rustc_borrowck/src/type_check/free_region_relations.rs:93:9:
can't find an upper bound!?
stack backtrace:
   0:     0x7bb66a6dfb8a - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hfc616348d9ad0abc
   1:     0x7bb66ae14d26 - core::fmt::write::h7ca648217bc79799
   2:     0x7bb66bd18711 - std::io::Write::write_fmt::h7960c58bfa5ccbcb
   3:     0x7bb66a6df9e2 - std::sys::backtrace::BacktraceLock::print::h3fb349e80cbe0423
   4:     0x7bb66a6e1f87 - std::panicking::default_hook::{{closure}}::h3366e5842cba645d
   5:     0x7bb66a6e1d70 - std::panicking::default_hook::hd7573a5d4879884b
   6:     0x7bb669851c48 - std[26cf95b4f122e720]::panicking::update_hook::<alloc[653926f6abfe8a8a]::boxed::Box<rustc_driver_impl[bcf7efa42268b866]::install_ice_hook::{closure#1}>>::{closure#0}
   7:     0x7bb66a6e2813 - std::panicking::rust_panic_with_hook::h66e909d048c263a9
   8:     0x7bb66a6e24d6 - std::panicking::begin_panic_handler::{{closure}}::h8d9aa8be7e8634cf
   9:     0x7bb66a6e0069 - std::sys::backtrace::__rust_end_short_backtrace::h7d7e47ef99abf6aa
  10:     0x7bb66a6e21cd - rust_begin_unwind
  11:     0x7bb6673a0ef0 - core::panicking::panic_fmt::hf8ffc7c15bfb58a0
  12:     0x7bb66961e200 - <rustc_borrowck[2064f1529492eb9c]::type_check::free_region_relations::UniversalRegionRelations>::non_local_upper_bounds
  13:     0x7bb66aec9596 - rustc_borrowck[2064f1529492eb9c]::nll::compute_regions
  14:     0x7bb66beab12e - rustc_borrowck[2064f1529492eb9c]::do_mir_borrowck
  15:     0x7bb66be9e2f9 - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>
  16:     0x7bb66b10b817 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  17:     0x7bb66b10b315 - rustc_query_impl[291ba1fcadd92b61]::query_impl::mir_borrowck::get_query_non_incr::__rust_end_short_backtrace
  18:     0x7bb66b88098a - rustc_middle[9ee9ea6fc8845c53]::query::plumbing::query_get_at::<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>>
  19:     0x7bb66b8809ea - <rustc_borrowck[2064f1529492eb9c]::type_check::TypeChecker>::prove_closure_bounds
  20:     0x7bb66b163068 - <rustc_borrowck[2064f1529492eb9c]::type_check::TypeChecker>::typeck_mir
  21:     0x7bb66be8c748 - rustc_borrowck[2064f1529492eb9c]::type_check::type_check
  22:     0x7bb66aec3787 - rustc_borrowck[2064f1529492eb9c]::nll::compute_regions
  23:     0x7bb66beab12e - rustc_borrowck[2064f1529492eb9c]::do_mir_borrowck
  24:     0x7bb66be9e2f9 - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>
  25:     0x7bb66b10b817 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  26:     0x7bb66b10b315 - rustc_query_impl[291ba1fcadd92b61]::query_impl::mir_borrowck::get_query_non_incr::__rust_end_short_backtrace
  27:     0x7bb66b88098a - rustc_middle[9ee9ea6fc8845c53]::query::plumbing::query_get_at::<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>>
  28:     0x7bb66b8809ea - <rustc_borrowck[2064f1529492eb9c]::type_check::TypeChecker>::prove_closure_bounds
  29:     0x7bb66b163068 - <rustc_borrowck[2064f1529492eb9c]::type_check::TypeChecker>::typeck_mir
  30:     0x7bb66be8c748 - rustc_borrowck[2064f1529492eb9c]::type_check::type_check
  31:     0x7bb66aec3787 - rustc_borrowck[2064f1529492eb9c]::nll::compute_regions
  32:     0x7bb66beab12e - rustc_borrowck[2064f1529492eb9c]::do_mir_borrowck
  33:     0x7bb66be9e2f9 - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>
  34:     0x7bb66b10b817 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  35:     0x7bb66b10b315 - rustc_query_impl[291ba1fcadd92b61]::query_impl::mir_borrowck::get_query_non_incr::__rust_end_short_backtrace
  36:     0x7bb66b6b588c - rustc_middle[9ee9ea6fc8845c53]::query::plumbing::query_get_at::<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>>
  37:     0x7bb66bd3b2de - rustc_hir_analysis[2b9e33d6773a99db]::collect::type_of::type_of_opaque
  38:     0x7bb66bd3b151 - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::type_of_opaque::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>
  39:     0x7bb66aefe3d1 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_query_system[397df17712590249]::query::caches::DefIdCache<rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  40:     0x7bb66bff37f5 - rustc_query_impl[291ba1fcadd92b61]::query_impl::type_of_opaque::get_query_non_incr::__rust_end_short_backtrace
  41:     0x7bb66b57482c - rustc_middle[9ee9ea6fc8845c53]::query::plumbing::query_get_at::<rustc_query_system[397df17712590249]::query::caches::DefIdCache<rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>>
  42:     0x7bb66af0579b - rustc_hir_analysis[2b9e33d6773a99db]::collect::type_of::type_of
  43:     0x7bb66aeff5fa - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::type_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>
  44:     0x7bb66aefe3d1 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_query_system[397df17712590249]::query::caches::DefIdCache<rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  45:     0x7bb66aefdf6b - rustc_query_impl[291ba1fcadd92b61]::query_impl::type_of::get_query_non_incr::__rust_end_short_backtrace
  46:     0x7bb66b57482c - rustc_middle[9ee9ea6fc8845c53]::query::plumbing::query_get_at::<rustc_query_system[397df17712590249]::query::caches::DefIdCache<rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 8usize]>>>
  47:     0x7bb66b58fb67 - rustc_hir_analysis[2b9e33d6773a99db]::check::check::check_item_type
  48:     0x7bb6685a4377 - rustc_hir_analysis[2b9e33d6773a99db]::check::wfcheck::check_well_formed
  49:     0x7bb66b7ef407 - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::check_well_formed::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 1usize]>>
  50:     0x7bb66b7eeea7 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 1usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  51:     0x7bb66b7ee90b - rustc_query_impl[291ba1fcadd92b61]::query_impl::check_well_formed::get_query_non_incr::__rust_end_short_backtrace
  52:     0x7bb66b7ef475 - rustc_middle[9ee9ea6fc8845c53]::query::plumbing::query_ensure_error_guaranteed::<rustc_data_structures[f86a4f0d0152e187]::vec_cache::VecCache<rustc_span[59b99cb1407325ff]::def_id::LocalDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 1usize]>, rustc_query_system[397df17712590249]::dep_graph::graph::DepNodeIndex>, ()>
  53:     0x7bb66b7ef965 - rustc_hir_analysis[2b9e33d6773a99db]::check::wfcheck::check_mod_type_wf
  54:     0x7bb66b7ef495 - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::check_mod_type_wf::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 1usize]>>
  55:     0x7bb66bd66404 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_query_system[397df17712590249]::query::caches::DefaultCache<rustc_span[59b99cb1407325ff]::def_id::LocalModDefId, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  56:     0x7bb66bd661a0 - rustc_query_impl[291ba1fcadd92b61]::query_impl::check_mod_type_wf::get_query_non_incr::__rust_end_short_backtrace
  57:     0x7bb66b108374 - rustc_hir_analysis[2b9e33d6773a99db]::check_crate
  58:     0x7bb66b1f8ce8 - rustc_interface[ad5173bb1fff4f1]::passes::run_required_analyses
  59:     0x7bb66bd1c59e - rustc_interface[ad5173bb1fff4f1]::passes::analysis
  60:     0x7bb66bd1c56f - rustc_query_impl[291ba1fcadd92b61]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[291ba1fcadd92b61]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 0usize]>>
  61:     0x7bb66bdc0415 - rustc_query_system[397df17712590249]::query::plumbing::try_execute_query::<rustc_query_impl[291ba1fcadd92b61]::DynamicConfig<rustc_query_system[397df17712590249]::query::caches::SingleCache<rustc_middle[9ee9ea6fc8845c53]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[291ba1fcadd92b61]::plumbing::QueryCtxt, false>
  62:     0x7bb66bdc014e - rustc_query_impl[291ba1fcadd92b61]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  63:     0x7bb66bd5ad9e - rustc_interface[ad5173bb1fff4f1]::passes::create_and_enter_global_ctxt::<core[1d264cc251a564c0]::option::Option<rustc_interface[ad5173bb1fff4f1]::queries::Linker>, rustc_driver_impl[bcf7efa42268b866]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
  64:     0x7bb66bd99516 - rustc_interface[ad5173bb1fff4f1]::interface::run_compiler::<(), rustc_driver_impl[bcf7efa42268b866]::run_compiler::{closure#0}>::{closure#1}
  65:     0x7bb66bc83511 - std[26cf95b4f122e720]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[ad5173bb1fff4f1]::util::run_in_thread_with_globals<rustc_interface[ad5173bb1fff4f1]::util::run_in_thread_pool_with_globals<rustc_interface[ad5173bb1fff4f1]::interface::run_compiler<(), rustc_driver_impl[bcf7efa42268b866]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  66:     0x7bb66bc839c8 - <<std[26cf95b4f122e720]::thread::Builder>::spawn_unchecked_<rustc_interface[ad5173bb1fff4f1]::util::run_in_thread_with_globals<rustc_interface[ad5173bb1fff4f1]::util::run_in_thread_pool_with_globals<rustc_interface[ad5173bb1fff4f1]::interface::run_compiler<(), rustc_driver_impl[bcf7efa42268b866]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[1d264cc251a564c0]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  67:     0x7bb66bc84f81 - std::sys::pal::unix::thread::Thread:🆕:thread_start::hc1bbaaa2227026bb
  68:     0x7bb66d3cda94 - <unknown>
  69:     0x7bb66d45aa34 - clone
  70:                0x0 - <unknown>

error: the compiler unexpectedly panicked. this is a bug.

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: rustc 1.85.1 (4eb161250 2025-03-15) running on x86_64-unknown-linux-gnu

note: compiler flags: --crate-type lib -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2

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

query stack during panic:
#0 [mir_borrowck] borrow-checking `<impl at src/lib.rs:22:1: 22:20>::subscribe::{closure#0}::{closure#0}`
#1 [mir_borrowck] borrow-checking `<impl at src/lib.rs:22:1: 22:20>::subscribe::{closure#0}`
end of query stack
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: {OpaqueTypeKey { def_id: DefId(0:28 ~ playground[6412]::{impl#0}::subscribe::{opaque#0}), args: [D/#0, E/#1, H/#2, '?4] }: OpaqueTypeDecl { hidden_type: OpaqueHiddenType { span: src/lib.rs:27:5: 37:6 (#0), ty: Coroutine(DefId(0:29 ~ playground[6412]::{impl#0}::subscribe::{closure#0}), [D/#0, E/#1, H/#2, (), std::future::ResumeTy, (), (), CoroutineWitness(DefId(0:29 ~ playground[6412]::{impl#0}::subscribe::{closure#0}), [D/#0, E/#1, H/#2]), (&'?3 EventBus<D/#0>, H/#2)]) } }}
  |
  = note: delayed at compiler/rustc_infer/src/infer/opaque_types/table.rs:44:43 - disabled backtrace

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: rustc 1.85.1 (4eb161250 2025-03-15) running on x86_64-unknown-linux-gnu

note: compiler flags: --crate-type lib -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2

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

query stack during panic:
end of query stack

The code is available in rust playground:
link
and the error is present for both stable, beta, nightly and both in debug and release builds: