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: Couldn't evaluate constant const #123893

Open
matthiaskrgr opened this issue Apr 13, 2024 · 3 comments
Open

ICE: Couldn't evaluate constant const #123893

matthiaskrgr opened this issue Apr 13, 2024 · 3 comments
Labels
-Zpolymorphize Unstable option: Polymorphization. A-mir-opt Area: MIR optimizations A-mir-opt-inlining Area: MIR inlining C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. S-has-mcve Status: A Minimal Complete and Verifiable Example has been found for this issue T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@matthiaskrgr
Copy link
Member

auto-reduced (treereduce-rust):

#![crate_type = "lib"]

pub fn demo_for_i32() {
    generic_impl::<bool>();
}

fn generic_impl<T>() {
    trait MagicTrait {
        const IS_BIG: bool;
    }
    impl<T> MagicTrait for T {
        const IS_BIG: bool = std::mem::size_of::<T>() > 10;
    }
    if T::IS_BIG {
        big_impl::<i32>();
    } else {
    }
}

#[inline(never)]
fn big_impl<T>() {}
original code

original:

//@ compile-flags: -Cno-prepopulate-passes -Copt-level=0

#![crate_type = "lib"]

#[no_mangle]
pub fn demo_for_i32() {
    generic_impl::<bool>();
}

// Two important things here:
// - We replace the "then" block with `unreachable` to avoid linking problems
// - We neither declare nor define the `big_impl` that said block "calls".

// CHECK-LABEL: ; skip_mono_inside_if_false::generic_impl
// CHECK: start:
// CHECK-NEXT: br label %[[ELSE_BRANCH:bb[0-9]+]]
//@ compile-flags: -Cno-prepopulate-passes -Copt-level=0
// CHECK-NEXT: call skip_mono_inside_if_false::small_impl
// CHECK: bb{{[0-9]+}}:
// CHECK-NEXT: ret void
// CHECK: bb{{[0-9+]}}:
// CHECK-NEXT: unreachable

fn generic_impl<T>() {
    trait MagicTrait {
        const IS_BIG: bool;
    }
    impl<T> MagicTrait for T {
        const IS_BIG: bool = std::mem::size_of::<T>() > 10;
    }
    if T::IS_BIG {
        big_impl::<i32>();
    } else {
        small_impl::<T>();
    }
}

#[no_mangle]
fn small_impl<T>() {}
#[inline(never)]
fn big_impl<T>() {}

Version information

rustc 1.79.0-nightly (f96442b44 2024-04-13)
binary: rustc
commit-hash: f96442b4482fef6a50b65f2284bcfb8921320183
commit-date: 2024-04-13
host: x86_64-unknown-linux-gnu
release: 1.79.0-nightly
LLVM version: 18.1.3

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc -Zpolymorphize=on -Zinline-mir=yes -Zinline-mir-threshold=20

Program output

error: internal compiler error: compiler/rustc_middle/src/mir/mod.rs:706:17: Couldn't evaluate constant const <T as generic_impl::MagicTrait>::IS_BIG in mono Instance { def: Item(DefId(0:4 ~ mvce[8b78]::generic_impl)), args: [T/#0] }

thread 'rustc' panicked at compiler/rustc_middle/src/mir/mod.rs:706:17:
Box<dyn Any>
stack backtrace:
   0:     0x7a2c31b24c05 - std::backtrace_rs::backtrace::libunwind::trace::h00deba103527a73b
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
   1:     0x7a2c31b24c05 - std::backtrace_rs::backtrace::trace_unsynchronized::hf5d25561c7e910bf
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7a2c31b24c05 - std::sys_common::backtrace::_print_fmt::h8c235180ec174889
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x7a2c31b24c05 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h97bfcacc988a320c
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7a2c31b73f3b - core::fmt::rt::Argument::fmt::h98a4403414630c7b
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/core/src/fmt/rt.rs:142:9
   5:     0x7a2c31b73f3b - core::fmt::write::h7ed4e82cf6ae16c2
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/core/src/fmt/mod.rs:1153:17
   6:     0x7a2c31b1978f - std::io::Write::write_fmt::h021c9c759a1d994c
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/io/mod.rs:1832:15
   7:     0x7a2c31b249de - std::sys_common::backtrace::_print::h37feb2e2ee8dc03e
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7a2c31b249de - std::sys_common::backtrace::print::h313bef07efe3b3d5
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7a2c31b27359 - std::panicking::default_hook::{{closure}}::h09dd3dc720a66f04
  10:     0x7a2c31b2709d - std::panicking::default_hook::hbca849e2babb7b7b
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/panicking.rs:291:9
  11:     0x7a2c2e4740cb - std[c28e32ecf35ad6f0]::panicking::update_hook::<alloc[7171408d7454e587]::boxed::Box<rustc_driver_impl[6ef106ef01282116]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7a2c31b27a5c - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h9e26cddd7f0c9bb2
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/alloc/src/boxed.rs:2032:9
  13:     0x7a2c31b27a5c - std::panicking::rust_panic_with_hook::h6554df54068e3877
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/panicking.rs:792:13
  14:     0x7a2c2e4a4114 - std[c28e32ecf35ad6f0]::panicking::begin_panic::<rustc_errors[880e2e9b97d9d508]::ExplicitBug>::{closure#0}
  15:     0x7a2c2e4a0bb6 - std[c28e32ecf35ad6f0]::sys_common::backtrace::__rust_end_short_backtrace::<std[c28e32ecf35ad6f0]::panicking::begin_panic<rustc_errors[880e2e9b97d9d508]::ExplicitBug>::{closure#0}, !>
  16:     0x7a2c2e49c1a6 - std[c28e32ecf35ad6f0]::panicking::begin_panic::<rustc_errors[880e2e9b97d9d508]::ExplicitBug>
  17:     0x7a2c2e4ad141 - <rustc_errors[880e2e9b97d9d508]::diagnostic::BugAbort as rustc_errors[880e2e9b97d9d508]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  18:     0x7a2c2e952f7c - rustc_middle[4476c877cf51b66a]::util::bug::opt_span_bug_fmt::<rustc_span[96d7dd3a041ddde8]::span_encoding::Span>::{closure#0}
  19:     0x7a2c2e93a3ea - rustc_middle[4476c877cf51b66a]::ty::context::tls::with_opt::<rustc_middle[4476c877cf51b66a]::util::bug::opt_span_bug_fmt<rustc_span[96d7dd3a041ddde8]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  20:     0x7a2c2e93a28b - rustc_middle[4476c877cf51b66a]::ty::context::tls::with_context_opt::<rustc_middle[4476c877cf51b66a]::ty::context::tls::with_opt<rustc_middle[4476c877cf51b66a]::util::bug::opt_span_bug_fmt<rustc_span[96d7dd3a041ddde8]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  21:     0x7a2c2c5595d0 - rustc_middle[4476c877cf51b66a]::util::bug::bug_fmt
  22:     0x7a2c2d51f64d - rustc_monomorphize[aaae63cf39e8f1d7]::collector::collect_items_rec::{closure#0}
  23:     0x7a2c305fee90 - rustc_monomorphize[aaae63cf39e8f1d7]::collector::collect_items_rec
  24:     0x7a2c305ff846 - rustc_monomorphize[aaae63cf39e8f1d7]::collector::collect_items_rec
  25:     0x7a2c305f99af - rustc_monomorphize[aaae63cf39e8f1d7]::partitioning::collect_and_partition_mono_items
  26:     0x7a2c305f8fa8 - rustc_query_impl[eeb8c999b5a8107b]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[eeb8c999b5a8107b]::query_impl::collect_and_partition_mono_items::dynamic_query::{closure#2}::{closure#0}, rustc_middle[4476c877cf51b66a]::query::erase::Erased<[u8; 24usize]>>
  27:     0x7a2c305f8f8d - <rustc_query_impl[eeb8c999b5a8107b]::query_impl::collect_and_partition_mono_items::dynamic_query::{closure#2} as core[df923a4d76ddbbb4]::ops::function::FnOnce<(rustc_middle[4476c877cf51b66a]::ty::context::TyCtxt, ())>>::call_once
  28:     0x7a2c305f5b14 - rustc_query_system[70f2acc6e913f1e1]::query::plumbing::try_execute_query::<rustc_query_impl[eeb8c999b5a8107b]::DynamicConfig<rustc_query_system[70f2acc6e913f1e1]::query::caches::SingleCache<rustc_middle[4476c877cf51b66a]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[eeb8c999b5a8107b]::plumbing::QueryCtxt, false>
  29:     0x7a2c305f580b - rustc_query_impl[eeb8c999b5a8107b]::query_impl::collect_and_partition_mono_items::get_query_non_incr::__rust_end_short_backtrace
  30:     0x7a2c302e750d - rustc_codegen_ssa[eb7fdc92d8fe1e35]::back::symbol_export::exported_symbols_provider_local
  31:     0x7a2c2f9e3325 - rustc_query_impl[eeb8c999b5a8107b]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[eeb8c999b5a8107b]::query_impl::exported_symbols::dynamic_query::{closure#2}::{closure#0}, rustc_middle[4476c877cf51b66a]::query::erase::Erased<[u8; 16usize]>>
  32:     0x7a2c2f9e32ef - <rustc_query_impl[eeb8c999b5a8107b]::query_impl::exported_symbols::dynamic_query::{closure#2} as core[df923a4d76ddbbb4]::ops::function::FnOnce<(rustc_middle[4476c877cf51b66a]::ty::context::TyCtxt, rustc_span[96d7dd3a041ddde8]::def_id::CrateNum)>>::call_once
  33:     0x7a2c304f7b90 - rustc_query_system[70f2acc6e913f1e1]::query::plumbing::try_execute_query::<rustc_query_impl[eeb8c999b5a8107b]::DynamicConfig<rustc_query_system[70f2acc6e913f1e1]::query::caches::VecCache<rustc_span[96d7dd3a041ddde8]::def_id::CrateNum, rustc_middle[4476c877cf51b66a]::query::erase::Erased<[u8; 16usize]>>, false, false, false>, rustc_query_impl[eeb8c999b5a8107b]::plumbing::QueryCtxt, false>
  34:     0x7a2c304f7765 - rustc_query_impl[eeb8c999b5a8107b]::query_impl::exported_symbols::get_query_non_incr::__rust_end_short_backtrace
  35:     0x7a2c304f75ac - rustc_middle[4476c877cf51b66a]::query::plumbing::query_get_at::<rustc_query_system[70f2acc6e913f1e1]::query::caches::VecCache<rustc_span[96d7dd3a041ddde8]::def_id::CrateNum, rustc_middle[4476c877cf51b66a]::query::erase::Erased<[u8; 16usize]>>>
  36:     0x7a2c2ffbf201 - <rustc_metadata[d787e89e7347da9c]::rmeta::encoder::EncodeContext>::encode_crate_root
  37:     0x7a2c3075bf87 - rustc_metadata[d787e89e7347da9c]::rmeta::encoder::encode_metadata
  38:     0x7a2c307659b6 - rustc_metadata[d787e89e7347da9c]::fs::encode_and_write_metadata
  39:     0x7a2c30764b98 - rustc_interface[f2d8342b28389f0d]::passes::start_codegen
  40:     0x7a2c307642d8 - <rustc_interface[f2d8342b28389f0d]::queries::Queries>::codegen_and_build_linker
  41:     0x7a2c304d1844 - rustc_interface[f2d8342b28389f0d]::interface::run_compiler::<core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>, rustc_driver_impl[6ef106ef01282116]::run_compiler::{closure#0}>::{closure#0}
  42:     0x7a2c305aa79d - std[c28e32ecf35ad6f0]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[f2d8342b28389f0d]::util::run_in_thread_with_globals<rustc_interface[f2d8342b28389f0d]::util::run_in_thread_pool_with_globals<rustc_interface[f2d8342b28389f0d]::interface::run_compiler<core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>, rustc_driver_impl[6ef106ef01282116]::run_compiler::{closure#0}>::{closure#0}, core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>>::{closure#0}, core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>>
  43:     0x7a2c305aa5aa - <<std[c28e32ecf35ad6f0]::thread::Builder>::spawn_unchecked_<rustc_interface[f2d8342b28389f0d]::util::run_in_thread_with_globals<rustc_interface[f2d8342b28389f0d]::util::run_in_thread_pool_with_globals<rustc_interface[f2d8342b28389f0d]::interface::run_compiler<core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>, rustc_driver_impl[6ef106ef01282116]::run_compiler::{closure#0}>::{closure#0}, core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>>::{closure#0}, core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[df923a4d76ddbbb4]::result::Result<(), rustc_span[96d7dd3a041ddde8]::ErrorGuaranteed>>::{closure#2} as core[df923a4d76ddbbb4]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  44:     0x7a2c31b3195b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h576ca780b0730923
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/alloc/src/boxed.rs:2018:9
  45:     0x7a2c31b3195b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hfecb3e2e1e75bc77
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/alloc/src/boxed.rs:2018:9
  46:     0x7a2c31b3195b - std::sys::pal::unix::thread::Thread::new::thread_start::h855306464cd28dcd
                               at /rustc/f96442b4482fef6a50b65f2284bcfb8921320183/library/std/src/sys/pal/unix/thread.rs:108:17
  47:     0x7a2c2b2a955a - <unknown>
  48:     0x7a2c2b326a3c - <unknown>
  49:                0x0 - <unknown>

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.79.0-nightly (f96442b44 2024-04-13) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z polymorphize=on -Z inline-mir=yes -Z inline-mir-threshold=20 -Z dump-mir-dir=dir

query stack during panic:
#0 [collect_and_partition_mono_items] collect_and_partition_mono_items
#1 [exported_symbols] collecting exported symbols for crate `0`
end of query stack
error: aborting due to 1 previous error


@matthiaskrgr matthiaskrgr added 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. C-bug Category: This is a bug. labels Apr 13, 2024
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Apr 13, 2024
@matthiaskrgr
Copy link
Member Author

pub fn main() {
    generic_impl::<bool>();
}

fn generic_impl<T>() {
    trait MagicTrait {
        const IS_BIG: bool;
    }
    impl<T> MagicTrait for T {
        const IS_BIG: bool = true;
    }
    if T::IS_BIG {
        big_impl::<i32>();
    }
}

#[inline(never)]
fn big_impl<T>() {}

@matthiaskrgr
Copy link
Member Author

Regression in nightly-2022-09-18

commit[1] 2022-09-17: Auto merge of #98588 - b-naber:valtrees-cleanup, r=lcnr
commit[2] 2022-09-17: Auto merge of #101928 - notriddle:rollup-pexhhxe, r=notriddle
commit[3] 2022-09-17: Auto merge of #101784 - reitermarkus:const-memchr, r=thomcc
commit[4] 2022-09-17: Auto merge of #101938 - Dylan-DPC:rollup-6vlohhs, r=Dylan-DPC
commit[5] 2022-09-17: Auto merge of #101857 - lcnr:make-dyn-again, r=jackh726
commit[6] 2022-09-17: Auto merge of #101890 - rust-lang:pa-bump-version, r=pietroalbini
commit[7] 2022-09-17: Auto merge of #101946 - matthiaskrgr:rollup-jqkhsku, r=matthiaskrgr

@matthiaskrgr matthiaskrgr added A-mir-opt Area: MIR optimizations A-mir-opt-inlining Area: MIR inlining labels Apr 13, 2024
@jieyouxu jieyouxu added S-has-mcve Status: A Minimal Complete and Verifiable Example has been found for this issue and removed needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Apr 15, 2024
@matthiaskrgr matthiaskrgr added the S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. label Apr 18, 2024
@fmease fmease added the -Zpolymorphize Unstable option: Polymorphization. label Apr 20, 2024
@matthiaskrgr matthiaskrgr changed the title ICE: Couldn't evaluate constant ICE: Couldn't evaluate constant const Apr 23, 2024
@adwinwhite
Copy link
Contributor

Compiles fine now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-Zpolymorphize Unstable option: Polymorphization. A-mir-opt Area: MIR optimizations A-mir-opt-inlining Area: MIR inlining C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. S-has-mcve Status: A Minimal Complete and Verifiable Example has been found for this issue 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

5 participants