-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Description
I've encountered an Internal Compiler Error when running tests in release mode. It seems to be related to a SignatureMismatch during code generation when a closure uses a generic associated type.
While I haven't had time to create a minimal, standalone reproduction, I have a public branch with a guaranteed reproduction of the issue.
Code
The code is in the branch: https://github.com/aptos-labs/aptos-core/tree/gelash/reprocompilebug
(The repo can be set up using the dev_setup.sh script: https://github.com/aptos-labs/aptos-core/blob/main/scripts/dev_setup.sh)
Steps to Reproduce
- Clone the repository and check out the branch.
- cd aptos-move/block-executor
- cargo test --release
Observed Behavior
The rustc process panics with an ICE. The bug seems to be triggered when a closure (at aptos-move/block-executor/src/executor.rs:755) is passed to a generic function. The closure's signature uses an associated type T::Tag, which is u32 in the test context. The compiler's code generator seems to fail to unify T::Tag with u32. The bug can be worked around by using a &mut dyn FnMut in the signature, which may suggest it is an inlining or monomorphization issue.
rustc --version --verbose
:
rustc 1.86.0 (05f9846f8 2025-03-31)
binary: rustc
commit-hash: 05f9846f893b09a1be1fc8560e33fc3c815cfecb
commit-date: 2025-03-31
host: aarch64-apple-darwin
release: 1.86.0
LLVM version: 19.1.7
Error output
error: internal compiler error: compiler/rustc_traits/src/codegen.rs:45:13: Encountered error `SignatureMismatch(SignatureMismatchData { found_trait_ref: <{closure@aptos-move/block-executor/src/executor.rs:755:60: 755:71} as std::ops::FnMut<(&combinatorial_tests::types::KeyType<[u8; 32]>, std::collections::HashSet<&<TxnType as aptos_types::transaction::BlockExecutableTransaction>::Tag>)>>, expected_trait_ref: <{closure@aptos-move/block-executor/src/executor.rs:755:60: 755:71} as std::ops::FnMut<(&combinatorial_tests::types::KeyType<[u8; 32]>, std::collections::HashSet<&u32>)>>, terr: Sorts(ExpectedFound { expected: u32, found: Alias(Projection, AliasTy { args: [TxnType/#0], def_id: DefId(22:5882 ~ aptos_types[2738]::transaction::BlockExecutableTransaction::Tag), .. }) }) })` selecting `<{closure@aptos-move/block-executor/src/executor.rs:755:60: 755:71} as std::ops::FnMut<(&combinatorial_tests::types::KeyType<[u8; 32]>, std::collections::HashSet<&u32>)>>` during codegen
Backtrace
thread 'rustc' panicked at compiler/rustc_traits/src/codegen.rs:45:13:
Box<dyn Any>
stack backtrace:
0: 0x10d8bdc78 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h217270392019d164
1: 0x10b0c03f0 - core::fmt::write::he22fcab56bd3ec61
2: 0x10d8b23e8 - std::io::Write::write_fmt::hb32eaafcfd249a19
3: 0x10d8bdb38 - std::sys::backtrace::BacktraceLock::print::h115149c0b879e5c3
4: 0x10d8bff9c - std::panicking::default_hook::{{closure}}::h5c3a234feebd11a5
5: 0x10d8bfdec - std::panicking::default_hook::ha0b223ccc4379930
6: 0x10bb2e5e8 - std[9558dde1fef45f95]::panicking::update_hook::<alloc[a353884198cecfbc]::boxed::Box<rustc_driver_impl[d422414f666c26d7]::install_ice_hook::{closure#1}>>::{closure#0}
7: 0x10d8c0c18 - std::panicking::rust_panic_with_hook::h203f96c93e7ac62d
8: 0x10bba86b0 - std[9558dde1fef45f95]::panicking::begin_panic::<rustc_errors[ec173a575dd51043]::ExplicitBug>::{closure#0}
9: 0x10bb97ef0 - std[9558dde1fef45f95]::sys::backtrace::__rust_end_short_backtrace::<std[9558dde1fef45f95]::panicking::begin_panic<rustc_errors[ec173a575dd51043]::ExplicitBug>::{closure#0}, !>
10: 0x1103d7270 - std[9558dde1fef45f95]::panicking::begin_panic::<rustc_errors[ec173a575dd51043]::ExplicitBug>
11: 0x10bbbbc6c - <rustc_errors[ec173a575dd51043]::diagnostic::BugAbort as rustc_errors[ec173a575dd51043]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
12: 0x10c72f1bc - rustc_middle[1801d875c9bb1917]::util::bug::opt_span_bug_fmt::<rustc_span[713c44711d819293]::span_encoding::Span>::{closure#0}
13: 0x10c6f0f14 - rustc_middle[1801d875c9bb1917]::ty::context::tls::with_opt::<rustc_middle[1801d875c9bb1917]::util::bug::opt_span_bug_fmt<rustc_span[713c44711d819293]::span_encoding::Span>::{closure#0}, !>::{closure#0}
14: 0x10c6f09f8 - rustc_middle[1801d875c9bb1917]::ty::context::tls::with_context_opt::<rustc_middle[1801d875c9bb1917]::ty::context::tls::with_opt<rustc_middle[1801d875c9bb1917]::util::bug::opt_span_bug_fmt<rustc_span[713c44711d819293]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
15: 0x11044915c - rustc_middle[1801d875c9bb1917]::util::bug::bug_fmt
16: 0x10d783324 - rustc_traits[ffd9b3a8635c387e]::codegen::codegen_select_candidate
17: 0x10d0565a4 - rustc_query_impl[fbca8996c8d1b263]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fbca8996c8d1b263]::query_impl::codegen_select_candidate::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 16usize]>>
18: 0x10d018158 - <rustc_query_impl[fbca8996c8d1b263]::query_impl::codegen_select_candidate::dynamic_query::{closure#2} as core[b495b0e88a16f434]::ops::function::FnOnce<(rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt, rustc_middle[1801d875c9bb1917]::ty::PseudoCanonicalInput<rustc_type_ir[85ae1dbed8e5a4b2]::predicate::TraitRef<rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt>>)>>::call_once
19: 0x10ce2da18 - rustc_query_system[ec46976a6e4fb68c]::query::plumbing::try_execute_query::<rustc_query_impl[fbca8996c8d1b263]::DynamicConfig<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefaultCache<rustc_middle[1801d875c9bb1917]::ty::PseudoCanonicalInput<rustc_type_ir[85ae1dbed8e5a4b2]::predicate::TraitRef<rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt>>, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 16usize]>>, false, false, false>, rustc_query_impl[fbca8996c8d1b263]::plumbing::QueryCtxt, false>
20: 0x10d097080 - rustc_query_impl[fbca8996c8d1b263]::query_impl::codegen_select_candidate::get_query_non_incr::__rust_end_short_backtrace
21: 0x10d824638 - rustc_ty_utils[817a870146b9d52]::instance::resolve_instance_raw
22: 0x10d055178 - rustc_query_impl[fbca8996c8d1b263]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fbca8996c8d1b263]::query_impl::resolve_instance_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 32usize]>>
23: 0x10d00b8f0 - <rustc_query_impl[fbca8996c8d1b263]::query_impl::resolve_instance_raw::dynamic_query::{closure#2} as core[b495b0e88a16f434]::ops::function::FnOnce<(rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt, rustc_middle[1801d875c9bb1917]::ty::PseudoCanonicalInput<(rustc_span[713c44711d819293]::def_id::DefId, &rustc_middle[1801d875c9bb1917]::ty::list::RawList<(), rustc_middle[1801d875c9bb1917]::ty::generic_args::GenericArg>)>)>>::call_once
24: 0x10ce40458 - rustc_query_system[ec46976a6e4fb68c]::query::plumbing::try_execute_query::<rustc_query_impl[fbca8996c8d1b263]::DynamicConfig<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefaultCache<rustc_middle[1801d875c9bb1917]::ty::PseudoCanonicalInput<(rustc_span[713c44711d819293]::def_id::DefId, &rustc_middle[1801d875c9bb1917]::ty::list::RawList<(), rustc_middle[1801d875c9bb1917]::ty::generic_args::GenericArg>)>, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 32usize]>>, false, false, false>, rustc_query_impl[fbca8996c8d1b263]::plumbing::QueryCtxt, false>
25: 0x10d0cb1e8 - rustc_query_impl[fbca8996c8d1b263]::query_impl::resolve_instance_raw::get_query_non_incr::__rust_end_short_backtrace
26: 0x10c760240 - <rustc_middle[1801d875c9bb1917]::ty::instance::Instance>::try_resolve
27: 0x10ca875bc - rustc_mir_transform[63c2c41f0ddad62]::inline::cycle::mir_callgraph_reachable::process
28: 0x10ca87c60 - rustc_mir_transform[63c2c41f0ddad62]::inline::cycle::mir_callgraph_reachable::process
29: 0x10ca87c60 - rustc_mir_transform[63c2c41f0ddad62]::inline::cycle::mir_callgraph_reachable::process
30: 0x10ca87c60 - rustc_mir_transform[63c2c41f0ddad62]::inline::cycle::mir_callgraph_reachable::process
31: 0x10ca87c60 - rustc_mir_transform[63c2c41f0ddad62]::inline::cycle::mir_callgraph_reachable::process
32: 0x10ca87c60 - rustc_mir_transform[63c2c41f0ddad62]::inline::cycle::mir_callgraph_reachable::process
33: 0x10ca86fc0 - rustc_mir_transform[63c2c41f0ddad62]::inline::cycle::mir_callgraph_reachable
34: 0x10d056194 - rustc_query_impl[fbca8996c8d1b263]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fbca8996c8d1b263]::query_impl::mir_callgraph_reachable::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 1usize]>>
35: 0x10d0142f4 - <rustc_query_impl[fbca8996c8d1b263]::query_impl::mir_callgraph_reachable::dynamic_query::{closure#2} as core[b495b0e88a16f434]::ops::function::FnOnce<(rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt, (rustc_middle[1801d875c9bb1917]::ty::instance::Instance, rustc_span[713c44711d819293]::def_id::LocalDefId))>>::call_once
36: 0x10ce96c40 - rustc_query_system[ec46976a6e4fb68c]::query::plumbing::try_execute_query::<rustc_query_impl[fbca8996c8d1b263]::DynamicConfig<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefaultCache<(rustc_middle[1801d875c9bb1917]::ty::instance::Instance, rustc_span[713c44711d819293]::def_id::LocalDefId), rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[fbca8996c8d1b263]::plumbing::QueryCtxt, false>
37: 0x10d083dbc - rustc_query_impl[fbca8996c8d1b263]::query_impl::mir_callgraph_reachable::get_query_non_incr::__rust_end_short_backtrace
38: 0x10c903608 - rustc_middle[1801d875c9bb1917]::query::plumbing::query_get_at::<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefaultCache<(rustc_middle[1801d875c9bb1917]::ty::instance::Instance, rustc_span[713c44711d819293]::def_id::LocalDefId), rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 1usize]>>>
39: 0x10ca3bb88 - rustc_mir_transform[63c2c41f0ddad62]::inline::process_blocks::<rustc_mir_transform[63c2c41f0ddad62]::inline::NormalInliner>
40: 0x10ca39210 - <rustc_mir_transform[63c2c41f0ddad62]::inline::Inline as rustc_mir_transform[63c2c41f0ddad62]::pass_manager::MirPass>::run_pass
41: 0x10c9cd820 - rustc_mir_transform[63c2c41f0ddad62]::pass_manager::run_passes_inner
42: 0x10c9ebefc - rustc_mir_transform[63c2c41f0ddad62]::optimized_mir
43: 0x10d052178 - rustc_query_impl[fbca8996c8d1b263]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fbca8996c8d1b263]::query_impl::optimized_mir::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 8usize]>>
44: 0x10ce1c9b4 - rustc_query_system[ec46976a6e4fb68c]::query::plumbing::try_execute_query::<rustc_query_impl[fbca8996c8d1b263]::DynamicConfig<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefIdCache<rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[fbca8996c8d1b263]::plumbing::QueryCtxt, false>
45: 0x10d06d4f0 - rustc_query_impl[fbca8996c8d1b263]::query_impl::optimized_mir::get_query_non_incr::__rust_end_short_backtrace
46: 0x10c741128 - rustc_middle[1801d875c9bb1917]::query::plumbing::query_get_at::<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefIdCache<rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 8usize]>>>
47: 0x10c764698 - <rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt>::instance_mir
48: 0x10cacc738 - rustc_monomorphize[421758cb76b7250a]::mono_checks::check_mono_item
49: 0x10d052ba0 - rustc_query_impl[fbca8996c8d1b263]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fbca8996c8d1b263]::query_impl::check_mono_item::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 0usize]>>
50: 0x10cff270c - <rustc_query_impl[fbca8996c8d1b263]::query_impl::check_mono_item::dynamic_query::{closure#2} as core[b495b0e88a16f434]::ops::function::FnOnce<(rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt, rustc_middle[1801d875c9bb1917]::ty::instance::Instance)>>::call_once
51: 0x10ce738b4 - rustc_query_system[ec46976a6e4fb68c]::query::plumbing::try_execute_query::<rustc_query_impl[fbca8996c8d1b263]::DynamicConfig<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefaultCache<rustc_middle[1801d875c9bb1917]::ty::instance::Instance, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[fbca8996c8d1b263]::plumbing::QueryCtxt, false>
52: 0x10d0d268c - rustc_query_impl[fbca8996c8d1b263]::query_impl::check_mono_item::get_query_non_incr::__rust_end_short_backtrace
53: 0x10caca078 - rustc_monomorphize[421758cb76b7250a]::collector::items_of_instance
54: 0x10d053fb0 - rustc_query_impl[fbca8996c8d1b263]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fbca8996c8d1b263]::query_impl::items_of_instance::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 32usize]>>
55: 0x10d0008fc - <rustc_query_impl[fbca8996c8d1b263]::query_impl::items_of_instance::dynamic_query::{closure#2} as core[b495b0e88a16f434]::ops::function::FnOnce<(rustc_middle[1801d875c9bb1917]::ty::context::TyCtxt, (rustc_middle[1801d875c9bb1917]::ty::instance::Instance, rustc_middle[1801d875c9bb1917]::mir::mono::CollectionMode))>>::call_once
56: 0x10ce98ea0 - rustc_query_system[ec46976a6e4fb68c]::query::plumbing::try_execute_query::<rustc_query_impl[fbca8996c8d1b263]::DynamicConfig<rustc_query_system[ec46976a6e4fb68c]::query::caches::DefaultCache<(rustc_middle[1801d875c9bb1917]::ty::instance::Instance, rustc_middle[1801d875c9bb1917]::mir::mono::CollectionMode), rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 32usize]>>, false, false, false>, rustc_query_impl[fbca8996c8d1b263]::plumbing::QueryCtxt, false>
57: 0x10d0d3404 - rustc_query_impl[fbca8996c8d1b263]::query_impl::items_of_instance::get_query_non_incr::__rust_end_short_backtrace
58: 0x10cadc1a0 - rustc_monomorphize[421758cb76b7250a]::collector::collect_items_rec::{closure#0}
59: 0x10cadaaf8 - rustc_monomorphize[421758cb76b7250a]::collector::collect_items_rec
60: 0x10cadb8f0 - rustc_monomorphize[421758cb76b7250a]::collector::collect_items_rec
61: 0x10cadb8f0 - rustc_monomorphize[421758cb76b7250a]::collector::collect_items_rec
62: 0x10cadb8f0 - rustc_monomorphize[421758cb76b7250a]::collector::collect_items_rec
63: 0x10cadb8f0 - rustc_monomorphize[421758cb76b7250a]::collector::collect_items_rec
64: 0x10cadb8f0 - rustc_monomorphize[421758cb76b7250a]::collector::collect_items_rec
65: 0x10cadf29c - rustc_monomorphize[421758cb76b7250a]::collector::collect_crate_mono_items
66: 0x10cad6b64 - rustc_monomorphize[421758cb76b7250a]::partitioning::collect_and_partition_mono_items
67: 0x10d0572f4 - rustc_query_impl[fbca8996c8d1b263]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fbca8996c8d1b263]::query_impl::collect_and_partition_mono_items::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 40usize]>>
68: 0x10ce27354 - rustc_query_system[ec46976a6e4fb68c]::query::plumbing::try_execute_query::<rustc_query_impl[fbca8996c8d1b263]::DynamicConfig<rustc_query_system[ec46976a6e4fb68c]::query::caches::SingleCache<rustc_middle[1801d875c9bb1917]::query::erase::Erased<[u8; 40usize]>>, false, false, false>, rustc_query_impl[fbca8996c8d1b263]::plumbing::QueryCtxt, false>
69: 0x10d0ba054 - rustc_query_impl[fbca8996c8d1b263]::query_impl::collect_and_partition_mono_items::get_query_non_incr::__rust_end_short_backtrace
70: 0x10b79e204 - rustc_codegen_ssa[5f097e4fbee12d7c]::base::codegen_crate::<rustc_codegen_llvm[a059380f87bfc1b0]::LlvmCodegenBackend>
71: 0x10b88f5a8 - <rustc_codegen_llvm[a059380f87bfc1b0]::LlvmCodegenBackend as rustc_codegen_ssa[5f097e4fbee12d7c]::traits::backend::CodegenBackend>::codegen_crate
72: 0x10c38a010 - <rustc_interface[3ca3d7ac74064029]::queries::Linker>::codegen_and_build_linker
73: 0x10badf934 - rustc_interface[3ca3d7ac74064029]::passes::create_and_enter_global_ctxt::<core[b495b0e88a16f434]::option::Option<rustc_interface[3ca3d7ac74064029]::queries::Linker>, rustc_driver_impl[d422414f666c26d7]::run_compiler::{closure#0}::{closure#2}>
74: 0x10bb2c9d4 - rustc_interface[3ca3d7ac74064029]::interface::run_compiler::<(), rustc_driver_impl[d422414f666c26d7]::run_compiler::{closure#0}>::{closure#1}
75: 0x10bb1daa4 - std[9558dde1fef45f95]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[3ca3d7ac74064029]::util::run_in_thread_with_globals<rustc_interface[3ca3d7ac74064029]::util::run_in_thread_pool_with_globals<rustc_interface[3ca3d7ac74064029]::interface::run_compiler<(), rustc_driver_impl[d422414f666c26d7]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
76: 0x10bb320fc - <<std[9558dde1fef45f95]::thread::Builder>::spawn_unchecked_<rustc_interface[3ca3d7ac74064029]::util::run_in_thread_with_globals<rustc_interface[3ca3d7ac74064029]::util::run_in_thread_pool_with_globals<rustc_interface[3ca3d7ac74064029]::interface::run_compiler<(), rustc_driver_impl[d422414f666c26d7]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[b495b0e88a16f434]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
77: 0x10d8cb6b4 - std::sys::pal::unix::thread::Thread::new::thread_start::h6d53b1b0c047a3b9
78: 0x199c9fc0c - __pthread_cond_wait
note: compiler flags: -C opt-level=3 -C embed-bitcode=no -C debuginfo=2 -C split-debuginfo=unpacked -C overflow-checks=on -C force-frame-pointers=yes -C force-unwind-tables=yes
query stack during panic:
#0 [codegen_select_candidate] computing candidate for `<{closure@aptos-move/block-executor/src/executor.rs:755:60: 755:71} as core::ops::function::FnMut<(&combinatorial_tests::types::KeyType<[u8; 32]>, std::collections::hash::set::HashSet<&u32>)>>`
#1 [resolve_instance_raw] resolving instance `<{closure@aptos-move/block-executor/src/executor.rs:755:60: 755:71} as core::ops::function::FnMut<(&combinatorial_tests::types::KeyType<[u8; 32]>, std::collections::hash::set::HashSet<&u32>)>>::call_mut`
#2 [mir_callgraph_reachable] computing if `executor::<impl at aptos-move/block-executor/src/executor.rs:111:1: 117:31>::execute_transactions_parallel_v2` (transitively) calls `combinatorial_tests::resource_tests::execute_block_parallel`
#3 [optimized_mir] optimizing MIR for `combinatorial_tests::resource_tests::execute_block_parallel`
#4 [check_mono_item] monomorphization-time checking
#5 [items_of_instance] collecting items used by `combinatorial_tests::resource_tests::execute_block_parallel::<combinatorial_tests::types::MockTransaction<combinatorial_tests::types::KeyType<[u8; 32]>, combinatorial_tests::mock_executor::MockEvent>, combinatorial_tests::types::NonEmptyGroupDataView<combinatorial_tests::types::KeyType<[u8; 32]>>, txn_provider::default::DefaultTxnProvider<combinatorial_tests::types::MockTransaction<combinatorial_tests::types::KeyType<[u8; 32]>, combinatorial_tests::mock_executor::MockEvent>>>`
#6 [collect_and_partition_mono_items] collect_and_partition_mono_items
end of query stack
error: could not compile `aptos-block-executor` (lib test)