Skip to content

[ICE]: delegation None in relate (variance) #155128

@matthiaskrgr

Description

@matthiaskrgr

auto-reduced (treereduce-rust):

fn a() {}

reuse a as b {
  fn foo<T>() {};
  foo
}

original:

#![feature(fn_delegation)]
fn a() {}

reuse a as b {
  fn foo<T>() {};
  foo
}

fn main() {}

Version information

rustc 1.96.0-nightly (b6100ccf7 2026-04-10)
binary: rustc
commit-hash: b6100ccf71c092dd01e7a68930360892545ee4fb
commit-date: 2026-04-10
host: x86_64-unknown-linux-gnu
release: 1.96.0-nightly
LLVM version: 22.1.2

Possibly related line of code:

variances: I::VariancesOf,
a_args: I::GenericArgs,
b_args: I::GenericArgs,
) -> RelateResult<I, I::GenericArgs> {
let cx = relation.cx();
let args = iter::zip(a_args.iter(), b_args.iter()).enumerate().map(|(i, (a, b))| {
let variance = variances.get(i).unwrap();
relation.relate_with_variance(variance, VarianceDiagInfo::None, a, b)
});
// FIXME: We can probably try to reuse `a_args` here if it did not change.
cx.mk_args_from_iter(args)
}

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc

Program output

error[E0658]: functions delegation is not yet fully implemented
 --> /tmp/icemaker_global_tempdir.gFSlvoGoVS6n/rustc_testrunner_tmpdir_reporting.1Ai3Wo3B0g7u/mvce.rs:3:1
  |
3 | / reuse a as b {
4 | |   fn foo<T>() {};
5 | |   foo
6 | | }
  | |_^
  |
  = note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
  = help: add `#![feature(fn_delegation)]` to the crate attributes to enable
  = note: this compiler was built on 2026-04-10; consider upgrading it if it is out of date

warning: unnecessary trailing semicolon
 --> /tmp/icemaker_global_tempdir.gFSlvoGoVS6n/rustc_testrunner_tmpdir_reporting.1Ai3Wo3B0g7u/mvce.rs:4:17
  |
4 |   fn foo<T>() {};
  |                 ^ help: remove this semicolon
  |
  = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default

error[E0601]: `main` function not found in crate `mvce`
 --> /tmp/icemaker_global_tempdir.gFSlvoGoVS6n/rustc_testrunner_tmpdir_reporting.1Ai3Wo3B0g7u/mvce.rs:6:2
  |
6 | }
  |  ^ consider adding a `main` function to `/tmp/icemaker_global_tempdir.gFSlvoGoVS6n/rustc_testrunner_tmpdir_reporting.1Ai3Wo3B0g7u/mvce.rs`


thread 'rustc' (1821640) panicked at /rustc-dev/b6100ccf71c092dd01e7a68930360892545ee4fb/compiler/rustc_type_ir/src/relate.rs:142:41:
called `Option::unwrap()` on a `None` value
stack backtrace:
   0:     0x7f5832a2184b - <<std[b6aa8882c14016da]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[e4da270f91b7d96]::fmt::Display>::fmt
   1:     0x7f583301f108 - core[e4da270f91b7d96]::fmt::write
   2:     0x7f5832a38b16 - <std[b6aa8882c14016da]::sys::stdio::unix::Stderr as std[b6aa8882c14016da]::io::Write>::write_fmt
   3:     0x7f58329f7b48 - std[b6aa8882c14016da]::panicking::default_hook::{closure#0}
   4:     0x7f5832a14eb3 - std[b6aa8882c14016da]::panicking::default_hook
   5:     0x7f58319f400c - std[b6aa8882c14016da]::panicking::update_hook::<alloc[30a42be7067dbe69]::boxed::Box<rustc_driver_impl[12e5e9e19b3364e8]::install_ice_hook::{closure#1}>>::{closure#0}
   6:     0x7f5832a15192 - std[b6aa8882c14016da]::panicking::panic_with_hook
   7:     0x7f58329f7c3a - std[b6aa8882c14016da]::panicking::panic_handler::{closure#0}
   8:     0x7f58329ee949 - std[b6aa8882c14016da]::sys::backtrace::__rust_end_short_backtrace::<std[b6aa8882c14016da]::panicking::panic_handler::{closure#0}, !>
   9:     0x7f58329f966d - __rustc[aa4d8a36e14f0fb8]::rust_begin_unwind
  10:     0x7f582f54e49c - core[e4da270f91b7d96]::panicking::panic_fmt
  11:     0x7f58303370a2 - core[e4da270f91b7d96]::panicking::panic
  12:     0x7f582f900719 - core[e4da270f91b7d96]::option::unwrap_failed
  13:     0x7f58330f93ec - rustc_type_ir[5e4cc6735d74b4d7]::relate::relate_args_with_variances::<rustc_middle[c5ddd56d26939a40]::ty::context::TyCtxt, rustc_infer[8ac30fcf9a057f3f]::infer::relate::generalize::Generalizer>
  14:     0x7f58330e4de4 - rustc_type_ir[5e4cc6735d74b4d7]::relate::structurally_relate_tys::<rustc_middle[c5ddd56d26939a40]::ty::context::TyCtxt, rustc_infer[8ac30fcf9a057f3f]::infer::relate::generalize::Generalizer>::{closure#0}
  15:     0x7f58330de8e4 - <rustc_infer[8ac30fcf9a057f3f]::infer::relate::generalize::Generalizer as rustc_type_ir[5e4cc6735d74b4d7]::relate::TypeRelation<rustc_middle[c5ddd56d26939a40]::ty::context::TyCtxt>>::tys::{closure#0}
  16:     0x7f58330cf880 - <rustc_infer[8ac30fcf9a057f3f]::infer::relate::type_relating::TypeRelating as rustc_type_ir[5e4cc6735d74b4d7]::relate::TypeRelation<rustc_middle[c5ddd56d26939a40]::ty::context::TyCtxt>>::tys
  17:     0x7f5833c8a0dc - <rustc_hir_typeck[6ba6a4a2acb7c415]::coercion::Coerce>::unify_raw
  18:     0x7f58330ba353 - <rustc_hir_typeck[6ba6a4a2acb7c415]::fn_ctxt::FnCtxt>::coerce
  19:     0x7f5833360e73 - <rustc_hir_typeck[6ba6a4a2acb7c415]::fn_ctxt::FnCtxt>::check_expr_block
  20:     0x7f58333c00b3 - <rustc_hir_typeck[6ba6a4a2acb7c415]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  21:     0x7f58333a73dd - <rustc_hir_typeck[6ba6a4a2acb7c415]::fn_ctxt::FnCtxt>::check_expr_call
  22:     0x7f58333bff03 - <rustc_hir_typeck[6ba6a4a2acb7c415]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  23:     0x7f5833360b85 - <rustc_hir_typeck[6ba6a4a2acb7c415]::fn_ctxt::FnCtxt>::check_expr_block
  24:     0x7f58333c00b3 - <rustc_hir_typeck[6ba6a4a2acb7c415]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  25:     0x7f5833358c00 - rustc_hir_typeck[6ba6a4a2acb7c415]::check::check_fn
  26:     0x7f5834210aae - rustc_hir_typeck[6ba6a4a2acb7c415]::typeck_with_inspect::{closure#0}
  27:     0x7f583420f4b0 - rustc_query_impl[fccebca9ed3ba15e]::query_impl::typeck_root::invoke_provider_fn::__rust_begin_short_backtrace
  28:     0x7f583331e966 - rustc_query_impl[fccebca9ed3ba15e]::execution::try_execute_query::<rustc_data_structures[eea759bf0ab68cb0]::vec_cache::VecCache<rustc_span[92bc7196f3184907]::def_id::LocalDefId, rustc_middle[c5ddd56d26939a40]::query::erase::ErasedData<[u8; 8usize]>, rustc_middle[c5ddd56d26939a40]::dep_graph::graph::DepNodeIndex>, false>
  29:     0x7f583331e183 - rustc_query_impl[fccebca9ed3ba15e]::query_impl::typeck_root::execute_query_non_incr::__rust_end_short_backtrace
  30:     0x7f5833321cd4 - <rustc_middle[c5ddd56d26939a40]::ty::context::TyCtxt>::par_hir_body_owners::<rustc_hir_analysis[a3ea64b35a81e47a]::check_crate::{closure#1}>::{closure#0}
  31:     0x7f58333216ad - rustc_hir_analysis[a3ea64b35a81e47a]::check_crate
  32:     0x7f5833f42282 - rustc_interface[44cf4d623293f2c1]::passes::analysis
  33:     0x7f583417d689 - rustc_query_impl[fccebca9ed3ba15e]::execution::try_execute_query::<rustc_middle[c5ddd56d26939a40]::query::caches::SingleCache<rustc_middle[c5ddd56d26939a40]::query::erase::ErasedData<[u8; 0usize]>>, false>
  34:     0x7f583417d2e9 - rustc_query_impl[fccebca9ed3ba15e]::query_impl::analysis::execute_query_non_incr::__rust_end_short_backtrace
  35:     0x7f58341aa0de - rustc_interface[44cf4d623293f2c1]::interface::run_compiler::<(), rustc_driver_impl[12e5e9e19b3364e8]::run_compiler::{closure#0}>::{closure#1}
  36:     0x7f583415d4fe - std[b6aa8882c14016da]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[44cf4d623293f2c1]::util::run_in_thread_with_globals<rustc_interface[44cf4d623293f2c1]::util::run_in_thread_pool_with_globals<rustc_interface[44cf4d623293f2c1]::interface::run_compiler<(), rustc_driver_impl[12e5e9e19b3364e8]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  37:     0x7f583415dda0 - <std[b6aa8882c14016da]::thread::lifecycle::spawn_unchecked<rustc_interface[44cf4d623293f2c1]::util::run_in_thread_with_globals<rustc_interface[44cf4d623293f2c1]::util::run_in_thread_pool_with_globals<rustc_interface[44cf4d623293f2c1]::interface::run_compiler<(), rustc_driver_impl[12e5e9e19b3364e8]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[e4da270f91b7d96]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  38:     0x7f583415ec2c - <std[b6aa8882c14016da]::sys::thread::unix::Thread>::new::thread_start
  39:     0x7f582dca597a - <unknown>
  40:     0x7f582dd292bc - <unknown>
  41:                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: please make sure that you have updated to the latest nightly

note: rustc 1.96.0-nightly (b6100ccf7 2026-04-10) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [typeck_root] type-checking `b`
#1 [analysis] running analysis passes on crate `mvce`
end of query stack
error: aborting due to 2 previous errors; 1 warning emitted

Some errors have detailed explanations: E0601, E0658.
For more information about an error, try `rustc --explain E0601`.

@rustbot label +F-fn_delegation

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.F-fn_delegation`#![feature(fn_delegation)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions