Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ICE:rustc panicked at compiler\rustc_mir_build\src\check_tail_calls.rs:130:17 #139305

Open
sososopy opened this issue Apr 3, 2025 · 2 comments
Labels
C-bug Category: This is a bug. F-explicit_tail_calls `#![feature(explicit_tail_calls)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-incomplete-features This issue requires the use of incomplete features. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@sososopy
Copy link

sososopy commented Apr 3, 2025

Code

fn fun(x: u32){
    fn A(x: u32, y: u32) -> u32 {
    }
    fn B(x: u32, y: u32) -> impl ToString {
        become A(x, y);
    }
}
fn main() {
}

Meta

rustc --version --verbose:

rustc 1.88.0-nightly (d5b4c2e4f 2025-04-02)
binary: rustc
commit-hash: d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df
commit-date: 2025-04-02
host: x86_64-pc-windows-msvc
release: 1.88.0-nightly
LLVM version: 20.1.1

Error output

error[E0658]: `become` expression is experimental
   --> .\ttt\test.rs:215:9
    |
215 |         become A(x, y);
    |         ^^^^^^^^^^^^^^
    |
    = note: see issue #112788 <https://github.com/rust-lang/rust/issues/112788> for more information
    = help: add `#![feature(explicit_tail_calls)]` to the crate attributes to enable
    = note: this compiler was built on 2025-04-02; consider upgrading it if it is out of date

error: internal compiler error: compiler\rustc_mir_build\src\check_tail_calls.rs:130:17: hir typeck should have checked the return type already
   --> .\ttt\test.rs:215:9
    |
215 |         become A(x, y);
Backtrace

thread 'rustc' panicked at compiler\rustc_mir_build\src\check_tail_calls.rs:130:17:
Box<dyn Any>
stack backtrace:
   0:     0x7ff958fb5272 - std::backtrace_rs::backtrace::win64::trace
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\..\..\backtrace\src\backtrace\win64.rs:85
   1:     0x7ff958fb5272 - std::backtrace_rs::backtrace::trace_unsynchronized
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
   2:     0x7ff958fb5272 - std::sys::backtrace::_print_fmt
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\sys\backtrace.rs:66
   3:     0x7ff958fb5272 - std::sys::backtrace::impl$0::print::impl$0::fmt
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\sys\backtrace.rs:39
   4:     0x7ff958fe757b - core::fmt::rt::Argument::fmt
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\core\src\fmt\rt.rs:178
   5:     0x7ff958fe757b - core::fmt::write
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\core\src\fmt\mod.rs:1480
   6:     0x7ff958fab577 - std::io::default_write_fmt
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\io\mod.rs:639
   7:     0x7ff958fab577 - std::io::Write::write_fmt<std::sys::stdio::windows::Stderr>
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\io\mod.rs:1914
   8:     0x7ff958fb50b5 - std::sys::backtrace::BacktraceLock::print
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\sys\backtrace.rs:42
   9:     0x7ff958fbbf7a - std::panicking::default_hook::closure$0
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\panicking.rs:300
  10:     0x7ff958fbbd10 - std::panicking::default_hook
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\panicking.rs:327
  11:     0x7ff95a682427 - core[dc542ccc761a93d1]::slice::sort::unstable::heapsort::heapsort::<((rustc_lint_defs[c80db952a9a9e479]::Level, &str), usize), <((rustc_lint_defs[c80db952a9a9e479]::Level, &str), usize) as core[dc542ccc761a93d1]::cmp::PartialOrd>::lt>
  12:     0x7ff958fbcc0e - std::panicking::rust_panic_with_hook
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\panicking.rs:841
  13:     0x7ff95be92863 - RINvNtNtNtNtCsiUNUIDks29p_4core5slice4sort6stable9quicksort9quicksortTjRNtNtCsbm0eYcYANYr_12rustc_errors7snippet10AnnotationENCINvMNtCsfQSFmXOyJZn_5alloc5sliceSB15_11sort_by_keyTINtNtBa_3cmp7ReversejEbENCNCNvMs5_NtB1c_7emitterNtB3o_12HumanEmitter18render_s
  14:     0x7ff95be859e9 - std[d2278e79d4ecef8a]::sys::backtrace::__rust_end_short_backtrace::<std[d2278e79d4ecef8a]::panicking::begin_panic<rustc_errors[8441ef8758805389]::ExplicitBug>::{closure#0}, !>
  15:     0x7ff95be808b8 - std[d2278e79d4ecef8a]::panicking::begin_panic::<rustc_errors[8441ef8758805389]::ExplicitBug>
  16:     0x7ff95be9f8d5 - <rustc_errors[8441ef8758805389]::diagnostic::BugAbort as rustc_errors[8441ef8758805389]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  17:     0x7ff95bd3a1ef - RINvMs6_NtCsecCnZO9y2YX_9hashbrown3rawINtB6_8RawTablejE14reserve_rehashNCINvNtNtCs4z27HeCxURF_8indexmap3map4core8get_hashTINtNtCsk01p6CsaoSU_13rustc_type_ir6binder6BinderNtNtNtCs8dq9bBHR3kY_12rustc_middle2ty7context6TyCtxtTRINtNtB2M_4list7RawListuNtB2M_2Ty
  18:     0x7ff95bde6686 - rustc_middle[5fb3d1e7f89237ca]::util::bug::span_bug_fmt::<rustc_span[342e4b5d4f7f104a]::span_encoding::Span>
  19:     0x7ff95bdbbbfd - <rustc_middle[5fb3d1e7f89237ca]::ty::consts::Const>::to_value
  20:     0x7ff95bdbb9c6 - <rustc_middle[5fb3d1e7f89237ca]::ty::consts::Const>::to_value
  21:     0x7ff95bde65e9 - rustc_middle[5fb3d1e7f89237ca]::util::bug::span_bug_fmt::<rustc_span[342e4b5d4f7f104a]::span_encoding::Span>
  22:     0x7ff9595ca565 - <rustc_mir_build[b7318cf334f4a7ee]::check_tail_calls::TailCallCkVisitor as rustc_middle[5fb3d1e7f89237ca]::thir::visit::Visitor>::visit_expr
  23:     0x7ff9595c833c - <rustc_mir_build[b7318cf334f4a7ee]::check_tail_calls::TailCallCkVisitor as rustc_middle[5fb3d1e7f89237ca]::thir::visit::Visitor>::visit_expr
  24:     0x7ff95956c824 - <rustc_arena[d3684f082febd529]::TypedArena<rustc_pattern_analysis[11f5058b6b6ca9b3]::pat::DeconstructedPat<rustc_pattern_analysis[11f5058b6b6ca9b3]::rustc::RustcPatCtxt>>>::grow
  25:     0x7ff9595c843e - <rustc_mir_build[b7318cf334f4a7ee]::check_tail_calls::TailCallCkVisitor as rustc_middle[5fb3d1e7f89237ca]::thir::visit::Visitor>::visit_expr
  26:     0x7ff9595c833c - <rustc_mir_build[b7318cf334f4a7ee]::check_tail_calls::TailCallCkVisitor as rustc_middle[5fb3d1e7f89237ca]::thir::visit::Visitor>::visit_expr
  27:     0x7ff9595c833c - <rustc_mir_build[b7318cf334f4a7ee]::check_tail_calls::TailCallCkVisitor as rustc_middle[5fb3d1e7f89237ca]::thir::visit::Visitor>::visit_expr
  28:     0x7ff9595c7ead - rustc_mir_build[b7318cf334f4a7ee]::check_tail_calls::check_tail_calls
  29:     0x7ff959e974db - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  30:     0x7ff959dd0c93 - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtCsilDQ9z9nh3l_21rustc_data_structures9vec_cache8VecCacheNtNtCs4tKXlikXsF2_10rustc_span6def_id10LocalDefIdINtNtNtCs8dq9bBHR3kY
  31:     0x7ff959ea0a30 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  32:     0x7ff95956ce6b - rustc_mir_build[b7318cf334f4a7ee]::builder::build_mir
  33:     0x7ff959429eb4 - rustc_mir_transform[c1960b92e6f6143d]::mir_built
  34:     0x7ff959e98e8b - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  35:     0x7ff959dd72bb - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtCsilDQ9z9nh3l_21rustc_data_structures9vec_cache8VecCacheNtNtCs4tKXlikXsF2_10rustc_span6def_id10LocalDefIdINtNtNtCs8dq9bBHR3kY
  36:     0x7ff959e9ce92 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  37:     0x7ff95941b747 - rustc_mir_transform[c1960b92e6f6143d]::ffi_unwind_calls::has_ffi_unwind_calls
  38:     0x7ff959e97e2b - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  39:     0x7ff959dd0c93 - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtCsilDQ9z9nh3l_21rustc_data_structures9vec_cache8VecCacheNtNtCs4tKXlikXsF2_10rustc_span6def_id10LocalDefIdINtNtNtCs8dq9bBHR3kY
  40:     0x7ff959ea7d90 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  41:     0x7ff95942c718 - rustc_mir_transform[c1960b92e6f6143d]::mir_promoted
  42:     0x7ff959e96e49 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  43:     0x7ff959dcd2a6 - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtCsilDQ9z9nh3l_21rustc_data_structures9vec_cache8VecCacheNtNtCs4tKXlikXsF2_10rustc_span6def_id10LocalDefIdINtNtNtCs8dq9bBHR3kY
  44:     0x7ff959e9d442 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  45:     0x7ff9596e4c50 - rustc_borrowck[235ceed02603ae4f]::mir_borrowck
  46:     0x7ff959e96dcb - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  47:     0x7ff959dd72bb - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtCsilDQ9z9nh3l_21rustc_data_structures9vec_cache8VecCacheNtNtCs4tKXlikXsF2_10rustc_span6def_id10LocalDefIdINtNtNtCs8dq9bBHR3kY
  48:     0x7ff959ea1772 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  49:     0x7ff9587f8774 - <rustc_hir_analysis[653cc36538c3ef1]::collect::type_of::opaque::RpitConstraintChecker as rustc_hir[54d9011b315e8a82]::intravisit::Visitor>::visit_expr
  50:     0x7ff958b3779b - <alloc[b8a61deb1be72a43]::sync::Arc<rustc_session[15763e0c540e77d7]::cstore::CrateSource>>::drop_slow
  51:     0x7ff959d62e0b - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtB4_6caches10DefIdCacheINtNtNtCs8dq9bBHR3kY_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB3r_KB3r_ENtNtB1f_8plumbing9QueryCtxt
  52:     0x7ff958b40d54 - rustc_query_impl[d9335ea94c0b0ece]::query_system
  53:     0x7ff95930b442 - <rustc_hir_analysis[653cc36538c3ef1]::collect::resolve_bound_vars::is_late_bound_map::ConstrainedCollector as rustc_hir[54d9011b315e8a82]::intravisit::Visitor>::visit_ty
  54:     0x7ff959e98d00 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  55:     0x7ff959d62e0b - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtB4_6caches10DefIdCacheINtNtNtCs8dq9bBHR3kY_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB3r_KB3r_ENtNtB1f_8plumbing9QueryCtxt
  56:     0x7ff959e9ad76 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  57:     0x7ff9587d3825 - rustc_hir_analysis[653cc36538c3ef1]::check::check::check_abi_fn_ptr
  58:     0x7ff9592d3fc8 - rustc_hir_analysis[653cc36538c3ef1]::check::wfcheck::check_well_formed
  59:     0x7ff959e9788b - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  60:     0x7ff959dd0f33 - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtCsilDQ9z9nh3l_21rustc_data_structures9vec_cache8VecCacheNtNtCs4tKXlikXsF2_10rustc_span6def_id10LocalDefIdINtNtNtCs8dq9bBHR3kY
  61:     0x7ff959ea83b5 - rustc_query_impl[d9335ea94c0b0ece]::plumbing::query_key_hash_verify_all
  62:     0x7ff9592e41d2 - rustc_hir_analysis[653cc36538c3ef1]::check::wfcheck::check_mod_type_wf
  63:     0x7ff958b3886b - <alloc[b8a61deb1be72a43]::sync::Arc<rustc_session[15763e0c540e77d7]::cstore::CrateSource>>::drop_slow
  64:     0x7ff958a834cc - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtB4_6caches12DefaultCacheNtNtCs4tKXlikXsF2_10rustc_span6def_id13LocalModDefIdINtNtNtCs8dq9bBHR3kY_12rustc_middle5query5erase6E
  65:     0x7ff958b4c730 - rustc_query_impl[d9335ea94c0b0ece]::query_system
  66:     0x7ff95932db2a - rustc_hir_analysis[653cc36538c3ef1]::check_crate
  67:     0x7ff95902499f - rustc_interface[cabc4d9db40f56f8]::passes::resolver_for_lowering_raw
  68:     0x7ff955926697 - rustc_interface[cabc4d9db40f56f8]::passes::analysis
  69:     0x7ff958b3b64a - <alloc[b8a61deb1be72a43]::sync::Arc<rustc_session[15763e0c540e77d7]::cstore::CrateSource>>::drop_slow
  70:     0x7ff958a43ece - RINvNtNtCskvioGLgoOG9_18rustc_query_system5query8plumbing17try_execute_queryINtCsiE9y6tCaNS4_16rustc_query_impl13DynamicConfigINtNtB4_6caches11SingleCacheINtNtNtCs8dq9bBHR3kY_12rustc_middle5query5erase6ErasedAhj0_EEKb0_KB3s_KB3s_ENtNtB1f_8plumbing9QueryCtx
  71:     0x7ff958b418b3 - rustc_query_impl[d9335ea94c0b0ece]::query_system
  72:     0x7ff9558ea10f - RINvNtNtCsi2E9fhZYu8g_3std3sys9backtrace28___rust_begin_short_backtraceNCNCNCINvMNtB6_6threadNtB1h_7Builder16spawn_unchecked_INtNtCsfQSFmXOyJZn_5alloc5boxed3BoxDINtNtNtCsiUNUIDks29p_4core3ops8function6FnOnceuEp6OutputuNtNtB2G_6marker4SendEL_EuEs_000uECs7V8
  73:     0x7ff9558e4043 - RINvNtNtCsi2E9fhZYu8g_3std3sys9backtrace28___rust_begin_short_backtraceNCNCNCINvMNtB6_6threadNtB1h_7Builder16spawn_unchecked_INtNtCsfQSFmXOyJZn_5alloc5boxed3BoxDINtNtNtCsiUNUIDks29p_4core3ops8function6FnOnceuEp6OutputuNtNtB2G_6marker4SendEL_EuEs_000uECs7V8
  74:     0x7ff9558ded13 - RINvNtNtCsi2E9fhZYu8g_3std3sys9backtrace28___rust_begin_short_backtraceNCNCINvNtCshp9I49agxXE_15rustc_interface4util26run_in_thread_with_globalsNCINvB1e_31run_in_thread_pool_with_globalsNCINvNtB1g_9interface12run_compileruNCNvCs7V8n164MtzI_17rustc_driver_i
  75:     0x7ff9558ee6f0 - RINvNtNtCsi2E9fhZYu8g_3std3sys9backtrace28___rust_begin_short_backtraceNCNCNCINvMNtB6_6threadNtB1h_7Builder16spawn_unchecked_INtNtCsfQSFmXOyJZn_5alloc5boxed3BoxDINtNtNtCsiUNUIDks29p_4core3ops8function6FnOnceuEp6OutputuNtNtB2G_6marker4SendEL_EuEs_000uECs7V8
  76:     0x7ff958fc192d - alloc::boxed::impl$28::call_once
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\alloc\src\boxed.rs:1966
  77:     0x7ff958fc192d - alloc::boxed::impl$28::call_once
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\alloc\src\boxed.rs:1966
  78:     0x7ff958fc192d - std::sys::pal::windows::thread::impl$0::new::thread_start
                               at /rustc/d5b4c2e4f19b6d7037371cdaecc3cc2c701c68df/library\std\src\sys\pal\windows\thread.rs:56
  79:     0x7ffa233b7374 - BaseThreadInitThunk
  80:     0x7ffa23f3cc91 - RtlUserThreadStart

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

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

note: please attach the file at `D:\rust_test\test1\src\rustc-ice-2025-04-03T06_07_02-3872.txt` to your bug report

query stack during panic:
#0 [check_tail_calls] tail-call-checking `fun::B`
#1 [mir_built] building MIR for `fun::B`
... and 8 other queries... use `env RUST_BACKTRACE=1` to see the full query stack
error: aborting due to 2 previous errors

@sososopy sososopy added C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Apr 3, 2025
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Apr 3, 2025
@meithecatte
Copy link
Contributor

Bisection results don't seem very useful, the PR that introduced this ICE is #133607: implement checks for tail calls.

searched nightlies: from nightly-2024-12-01 to nightly-2025-03-03
regressed nightly: nightly-2024-12-07
searched commit range: c94848c...8dc8377
regressed commit: 706141b

bisected with cargo-bisect-rustc v0.6.8

Host triple: x86_64-unknown-linux-gnu
Reproduce with:

cargo bisect-rustc --regress ice

@meithecatte
Copy link
Contributor

@rustbot label +F-explicit_tail_calls +requires-incomplete-features

The issue is a known FIXME in the code:

// FIXME(explicit_tail_calls): this currently fails for cases where opaques are used.
// e.g.
// ```
// fn a() -> impl Sized { become b() } // ICE
// fn b() -> u8 { 0 }
// ```
// we should think what is the expected behavior here.
// (we should probably just accept this by revealing opaques?)
if caller_sig.output() != callee_sig.output() {
span_bug!(expr.span, "hir typeck should have checked the return type already");
}

@rustbot rustbot added F-explicit_tail_calls `#![feature(explicit_tail_calls)]` requires-incomplete-features This issue requires the use of incomplete features. labels Apr 3, 2025
@jieyouxu jieyouxu removed the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Apr 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. F-explicit_tail_calls `#![feature(explicit_tail_calls)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-incomplete-features This issue requires the use of incomplete features. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

4 participants