Closed
Description
Changing the commented out snippet to the uncommented one caused a ICE when building on nightly 1.62.0
.
EDIT:
Moving the integer cast to before the shift fixes the ICE. (halves[0] as $int << HALF_SIZE
)
Code
pub trait BitSplit {
type Half;
fn merge(halves: [Self::Half; 2]) -> Self;
}
macro_rules! impl_ints {
($int:ty => $half:ty; $mask:expr) => {
impl BitSplit for $int {
type Half = $half;
#[inline]
fn merge(halves: [Self::Half; 2]) -> Self {
// stable: no error
// nightly: no error
(halves[0] << (std::mem::size_of::<$half>() * 8)) as $int | halves[1] as $int
// stable: "shift will overflow" error
// nightly: ICE as below
// const HALF_SIZE: usize = std::mem::size_of::<$half>() * 8;
// (halves[0] << HALF_SIZE) as $int | halves[1] as $int
}
}
};
}
impl_ints!(u128 => u64; 0x0000_0000_0000_0000_FFFF_FFFF_FFFF_FFFF);
impl_ints!( u64 => u32; 0x0000_0000_FFFF_FFFF);
impl_ints!( u32 => u16; 0x0000_FFFF);
impl_ints!( u16 => u8; 0x00FF);
Meta
rustc --version --verbose
:
rustc 1.62.0-nightly (ecd44958e 2022-05-10)
binary: rustc
commit-hash: ecd44958e0a21110d09862ee080d95a4ca6c52f8
commit-date: 2022-05-10
host: x86_64-unknown-linux-gnu
release: 1.62.0-nightly
LLVM version: 14.0.1
rustc +stable --version --verbose
:
rustc 1.60.0 (7737e0b5c 2022-04-04)
binary: rustc
commit-hash: 7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c
commit-date: 2022-04-04
host: x86_64-unknown-linux-gnu
release: 1.60.0
LLVM version: 14.0.0
Error output
:: cargo b
Compiling playground v0.1.0 (/home/erxkk/Source/erxkk/playground)
thread 'rustc' panicked at 'to_const_int doesn't work on scalar pairs: InterpErrorInfo(InterpErrorInfoInner { kind: using uninitialized data, but this operation requires initialized memory, backtrace: None })', /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/compiler/rustc_const_eval/src/interpret/operand.rs:243:36
stack backtrace:
0: 0x7fdba029d85d - std::backtrace_rs::backtrace::libunwind::trace::hd79e9b51bb0b02a3
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x7fdba029d85d - std::backtrace_rs::backtrace::trace_unsynchronized::hc4b2624d11f57391
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x7fdba029d85d - std::sys_common::backtrace::_print_fmt::h5b920b6df28041d5
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/sys_common/backtrace.rs:66:5
3: 0x7fdba029d85d - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h01f2db48eea34166
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/sys_common/backtrace.rs:45:22
4: 0x7fdba02f8efc - core::fmt::write::h743b8fce003c331c
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/core/src/fmt/mod.rs:1194:17
5: 0x7fdba028f041 - std::io::Write::write_fmt::h55edc38b905db9b5
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/io/mod.rs:1655:15
6: 0x7fdba02a0575 - std::sys_common::backtrace::_print::h72c54a6b7a86b7bf
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/sys_common/backtrace.rs:48:5
7: 0x7fdba02a0575 - std::sys_common::backtrace::print::h8b541992f5fa33c9
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/sys_common/backtrace.rs:35:9
8: 0x7fdba02a0575 - std::panicking::default_hook::{{closure}}::h47e8a61e5844dea4
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/panicking.rs:295:22
9: 0x7fdba02a01e9 - std::panicking::default_hook::h65ae1796882c178c
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/panicking.rs:314:9
10: 0x7fdba0acc5a1 - rustc_driver[caca827775d68846]::DEFAULT_HOOK::{closure#0}::{closure#0}
11: 0x7fdba02a0d46 - std::panicking::rust_panic_with_hook::h1c3eee211b989bad
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/panicking.rs:702:17
12: 0x7fdba02a0b47 - std::panicking::begin_panic_handler::{{closure}}::h653627205f5b2cdc
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/panicking.rs:588:13
13: 0x7fdba029dd14 - std::sys_common::backtrace::__rust_end_short_backtrace::h36d845a914b6aae7
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/sys_common/backtrace.rs:138:18
14: 0x7fdba02a0879 - rust_begin_unwind
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/panicking.rs:584:5
15: 0x7fdba0265bd3 - core::panicking::panic_fmt::hb6389d787a80a806
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/core/src/panicking.rs:142:14
16: 0x7fdba0265cc3 - core::result::unwrap_failed::h87e24b90746a4cce
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/core/src/result.rs:1785:5
17: 0x7fdba2ce2f11 - <rustc_const_eval[ec16a9026af29337]::interpret::operand::ImmTy>::to_const_int
18: 0x7fdba2ce4e0d - <rustc_mir_transform[8a7d782b281e026]::const_prop_lint::ConstPropagator>::check_binary_op
19: 0x7fdba1ee3ad7 - <rustc_mir_transform[8a7d782b281e026]::const_prop_lint::ConstPropagator as rustc_middle[7c51428e7903af24]::mir::visit::Visitor>::visit_body
20: 0x7fdba1ee2b20 - <rustc_mir_transform[8a7d782b281e026]::const_prop_lint::ConstProp as rustc_mir_transform[8a7d782b281e026]::pass_manager::MirLint>::run_lint
21: 0x7fdba1f070be - rustc_mir_transform[8a7d782b281e026]::pass_manager::run_passes
22: 0x7fdba1ef0907 - rustc_mir_transform[8a7d782b281e026]::mir_drops_elaborated_and_const_checked
23: 0x7fdba307921c - <rustc_query_system[a2f7ce718affbf81]::dep_graph::graph::DepGraph<rustc_middle[7c51428e7903af24]::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle[7c51428e7903af24]::ty::context::TyCtxt, rustc_middle[7c51428e7903af24]::ty::WithOptConstParam<rustc_span[ff646084812721ee]::def_id::LocalDefId>, &rustc_data_structures[c194a60a15a7bbb1]::steal::Steal<rustc_middle[7c51428e7903af24]::mir::Body>>
24: 0x7fdba24c3c71 - rustc_query_system[a2f7ce718affbf81]::query::plumbing::try_execute_query::<rustc_query_impl[7a7207227e977dca]::plumbing::QueryCtxt, rustc_query_system[a2f7ce718affbf81]::query::caches::DefaultCache<rustc_middle[7c51428e7903af24]::ty::WithOptConstParam<rustc_span[ff646084812721ee]::def_id::LocalDefId>, &rustc_data_structures[c194a60a15a7bbb1]::steal::Steal<rustc_middle[7c51428e7903af24]::mir::Body>>>
25: 0x7fdba25d88d8 - <rustc_query_impl[7a7207227e977dca]::Queries as rustc_middle[7c51428e7903af24]::ty::query::QueryEngine>::mir_drops_elaborated_and_const_checked
26: 0x7fdba1ef17ec - rustc_mir_transform[8a7d782b281e026]::optimized_mir
27: 0x7fdba30909c7 - <rustc_query_system[a2f7ce718affbf81]::dep_graph::graph::DepGraph<rustc_middle[7c51428e7903af24]::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle[7c51428e7903af24]::ty::context::TyCtxt, rustc_span[ff646084812721ee]::def_id::DefId, &rustc_middle[7c51428e7903af24]::mir::Body>
28: 0x7fdba24e6f02 - rustc_query_system[a2f7ce718affbf81]::query::plumbing::try_execute_query::<rustc_query_impl[7a7207227e977dca]::plumbing::QueryCtxt, rustc_query_system[a2f7ce718affbf81]::query::caches::DefaultCache<rustc_span[ff646084812721ee]::def_id::DefId, &rustc_middle[7c51428e7903af24]::mir::Body>>
29: 0x7fdba25d8b7e - <rustc_query_impl[7a7207227e977dca]::Queries as rustc_middle[7c51428e7903af24]::ty::query::QueryEngine>::optimized_mir
30: 0x7fdba260770f - <rustc_metadata[a14ae4d71db231a9]::rmeta::encoder::EncodeContext>::encode_crate_root
31: 0x7fdba315a3ca - rustc_metadata[a14ae4d71db231a9]::rmeta::encoder::encode_metadata_impl
32: 0x7fdba31746d1 - rustc_data_structures[c194a60a15a7bbb1]::sync::join::<rustc_metadata[a14ae4d71db231a9]::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata[a14ae4d71db231a9]::rmeta::encoder::encode_metadata::{closure#1}, rustc_metadata[a14ae4d71db231a9]::rmeta::encoder::EncodedMetadata, ()>
33: 0x7fdba3159b76 - rustc_metadata[a14ae4d71db231a9]::rmeta::encoder::encode_metadata
34: 0x7fdba2b18ed3 - <rustc_interface[dacacaf3651fe347]::passes::QueryContext>::enter::<<rustc_interface[dacacaf3651fe347]::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core[864d7ae58f623181]::result::Result<alloc[642b2cd0ec1e1a81]::boxed::Box<dyn core[864d7ae58f623181]::any::Any>, rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>>
35: 0x7fdba2b3f1ff - <rustc_interface[dacacaf3651fe347]::queries::Queries>::ongoing_codegen
36: 0x7fdba2ae0acb - <rustc_interface[dacacaf3651fe347]::interface::Compiler>::enter::<rustc_driver[caca827775d68846]::run_compiler::{closure#1}::{closure#2}, core[864d7ae58f623181]::result::Result<core[864d7ae58f623181]::option::Option<rustc_interface[dacacaf3651fe347]::queries::Linker>, rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>>
37: 0x7fdba2b0a3ff - rustc_span[ff646084812721ee]::with_source_map::<core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>, rustc_interface[dacacaf3651fe347]::interface::create_compiler_and_run<core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>, rustc_driver[caca827775d68846]::run_compiler::{closure#1}>::{closure#1}>
38: 0x7fdba2af4d64 - rustc_interface[dacacaf3651fe347]::interface::create_compiler_and_run::<core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>, rustc_driver[caca827775d68846]::run_compiler::{closure#1}>
39: 0x7fdba2addfa1 - <scoped_tls[d6203f3b3010b98e]::ScopedKey<rustc_span[ff646084812721ee]::SessionGlobals>>::set::<rustc_interface[dacacaf3651fe347]::interface::run_compiler<core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>, rustc_driver[caca827775d68846]::run_compiler::{closure#1}>::{closure#0}, core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>>
40: 0x7fdba2af754f - std[fd2a1eaf3e081d4d]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[dacacaf3651fe347]::util::run_in_thread_pool_with_globals<rustc_interface[dacacaf3651fe347]::interface::run_compiler<core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>, rustc_driver[caca827775d68846]::run_compiler::{closure#1}>::{closure#0}, core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>>::{closure#0}, core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>>
41: 0x7fdba2af7689 - <<std[fd2a1eaf3e081d4d]::thread::Builder>::spawn_unchecked_<rustc_interface[dacacaf3651fe347]::util::run_in_thread_pool_with_globals<rustc_interface[dacacaf3651fe347]::interface::run_compiler<core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>, rustc_driver[caca827775d68846]::run_compiler::{closure#1}>::{closure#0}, core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>>::{closure#0}, core[864d7ae58f623181]::result::Result<(), rustc_errors[14f27e81a88a2c7]::ErrorGuaranteed>>::{closure#1} as core[864d7ae58f623181]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
42: 0x7fdba02aabf3 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h211dae6d8dec3611
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/alloc/src/boxed.rs:1866:9
43: 0x7fdba02aabf3 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hb54334e8a7bb1f12
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/alloc/src/boxed.rs:1866:9
44: 0x7fdba02aabf3 - std::sys::unix::thread::Thread::new::thread_start::hf8b57655f2f2e68e
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/sys/unix/thread.rs:108:17
45: 0x7fdba00835c2 - start_thread
46: 0x7fdba0108584 - __clone
47: 0x0 - <unknown>
error: internal compiler error: unexpected panic
note: 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.62.0-nightly (4ca19e09d 2022-04-19) running on x86_64-unknown-linux-gnu
note: compiler flags: --crate-type lib -C embed-bitcode=no -C debuginfo=2 -C incremental
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [mir_drops_elaborated_and_const_checked] elaborating drops for `<impl at src/lib.rs:9:9: 32:10>::merge`
#1 [optimized_mir] optimizing MIR for `<impl at src/lib.rs:9:9: 32:10>::merge`
end of query stack
error: could not compile `playground`
Backtrace
:: RUST_BACKTRACE=1 cargo b
Compiling playground v0.1.0 (/home/erxkk/Source/erxkk/playground)
thread 'rustc' panicked at 'to_const_int doesn't work on scalar pairs: InterpErrorInfo(InterpErrorInfoInner { kind: using uninitialized data, but this operation requires initialized memory, backtrace: None })', /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/compiler/rustc_const_eval/src/interpret/operand.rs:243:36
stack backtrace:
0: rust_begin_unwind
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/std/src/panicking.rs:584:5
1: core::panicking::panic_fmt
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/core/src/panicking.rs:142:14
2: core::result::unwrap_failed
at /rustc/4ca19e09d302a4cbde14f9cb1bc109179dc824cd/library/core/src/result.rs:1785:5
3: <rustc_const_eval::interpret::operand::ImmTy>::to_const_int
4: <rustc_mir_transform::const_prop_lint::ConstPropagator>::check_binary_op
5: <rustc_mir_transform::const_prop_lint::ConstPropagator as rustc_middle::mir::visit::Visitor>::visit_body
6: <rustc_mir_transform::const_prop_lint::ConstProp as rustc_mir_transform::pass_manager::MirLint>::run_lint
7: rustc_mir_transform::pass_manager::run_passes
8: rustc_mir_transform::mir_drops_elaborated_and_const_checked
9: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>
10: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>>
11: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_drops_elaborated_and_const_checked
12: rustc_mir_transform::optimized_mir
13: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_span::def_id::DefId, &rustc_middle::mir::Body>
14: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_span::def_id::DefId, &rustc_middle::mir::Body>>
15: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::optimized_mir
16: <rustc_metadata::rmeta::encoder::EncodeContext>::encode_crate_root
17: rustc_metadata::rmeta::encoder::encode_metadata_impl
18: rustc_data_structures::sync::join::<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, rustc_metadata::rmeta::encoder::EncodedMetadata, ()>
19: rustc_metadata::rmeta::encoder::encode_metadata
20: <rustc_interface::passes::QueryContext>::enter::<<rustc_interface::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core::result::Result<alloc::boxed::Box<dyn core::any::Any>, rustc_errors::ErrorGuaranteed>>
21: <rustc_interface::queries::Queries>::ongoing_codegen
22: <rustc_interface::interface::Compiler>::enter::<rustc_driver::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_errors::ErrorGuaranteed>>
23: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_interface::interface::create_compiler_and_run<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#1}>
24: rustc_interface::interface::create_compiler_and_run::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>
25: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: internal compiler error: unexpected panic
note: 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.62.0-nightly (4ca19e09d 2022-04-19) running on x86_64-unknown-linux-gnu
note: compiler flags: --crate-type lib -C embed-bitcode=no -C debuginfo=2 -C incremental
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [mir_drops_elaborated_and_const_checked] elaborating drops for `<impl at src/lib.rs:9:9: 32:10>::merge`
#1 [optimized_mir] optimizing MIR for `<impl at src/lib.rs:9:9: 32:10>::merge`
end of query stack
error: could not compile `playground`