Skip to content

Internal Compiler Error when extracting overflowing bit-shift constant into constant local #96944

Closed
@epbuennig

Description

@epbuennig

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`

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions