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: interpret const eval failure of Unevaluated(UnevaluatedConst #130687

Closed
matthiaskrgr opened this issue Sep 22, 2024 · 5 comments · Fixed by #133164
Closed

ICE: interpret const eval failure of Unevaluated(UnevaluatedConst #130687

matthiaskrgr opened this issue Sep 22, 2024 · 5 comments · Fixed by #133164
Labels
A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) 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. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@matthiaskrgr
Copy link
Member

snippet:

pub struct Data([u8; usize::MAX >> 16]);
const _: &'static Data = &Data([0; usize::MAX >> 16]);

Version information

rustc 1.83.0-nightly (55043f067 2024-09-22)
binary: rustc
commit-hash: 55043f067dcf7067e7c6ebccf3639af94ff57bda
commit-date: 2024-09-22
host: x86_64-unknown-linux-gnu
release: 1.83.0-nightly
LLVM version: 19.1.0

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc

Program output

error[E0601]: `main` function not found in crate `mvce`
 --> /tmp/icemaker_global_tempdir.uajd7BjF457F/rustc_testrunner_tmpdir_reporting.GJfRmJzXgPMl/mvce.rs:2:55
  |
2 | const _: &'static Data = &Data([0; usize::MAX >> 16]);
  |                                                       ^ consider adding a `main` function to `/tmp/icemaker_global_tempdir.uajd7BjF457F/rustc_testrunner_tmpdir_reporting.GJfRmJzXgPMl/mvce.rs`

error[E0080]: evaluation of constant value failed
 --> /tmp/icemaker_global_tempdir.uajd7BjF457F/rustc_testrunner_tmpdir_reporting.GJfRmJzXgPMl/mvce.rs:2:32
  |
2 | const _: &'static Data = &Data([0; usize::MAX >> 16]);
  |                                ^^^^^^^^^^^^^^^^^^^^^ tried to allocate more memory than available to compiler

error: internal compiler error: compiler/rustc_const_eval/src/interpret/eval_context.rs:586:33: interpret const eval failure of Unevaluated(UnevaluatedConst { def: DefId(0:7 ~ mvce[dab4]::_), args: [], promoted: Some(promoted[0]) }, &'{erased} Data) which is not in required_consts
 --> /tmp/icemaker_global_tempdir.uajd7BjF457F/rustc_testrunner_tmpdir_reporting.GJfRmJzXgPMl/mvce.rs:2:26
  |
2 | const _: &'static Data = &Data([0; usize::MAX >> 16]);
  |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

thread 'rustc' panicked at compiler/rustc_const_eval/src/interpret/eval_context.rs:586:33:
Box<dyn Any>
stack backtrace:
   0:     0x7c179568af1a - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hd890a259e842de86
   1:     0x7c1795e03666 - core::fmt::write::ha27dfc921a37964e
   2:     0x7c1796d02333 - std::io::Write::write_fmt::h70c8a0cc59cad0a8
   3:     0x7c179568ad72 - std::sys::backtrace::BacktraceLock::print::h3013cc5c3ae4074f
   4:     0x7c179568d4f1 - std::panicking::default_hook::{{closure}}::h9e5c041fcf401891
   5:     0x7c179568d324 - std::panicking::default_hook::h788b5d87547559ac
   6:     0x7c179478495f - std[232e32126cf29c33]::panicking::update_hook::<alloc[d4d13292f8c1d48d]::boxed::Box<rustc_driver_impl[b1c9e4000593b067]::install_ice_hook::{closure#0}>>::{closure#0}
   7:     0x7c179568dc08 - std::panicking::rust_panic_with_hook::hb1c7ebf17e599033
   8:     0x7c17947bf061 - std[232e32126cf29c33]::panicking::begin_panic::<rustc_errors[c0761d72276853f8]::ExplicitBug>::{closure#0}
   9:     0x7c17947b2106 - std[232e32126cf29c33]::sys::backtrace::__rust_end_short_backtrace::<std[232e32126cf29c33]::panicking::begin_panic<rustc_errors[c0761d72276853f8]::ExplicitBug>::{closure#0}, !>
  10:     0x7c17947ad5d9 - std[232e32126cf29c33]::panicking::begin_panic::<rustc_errors[c0761d72276853f8]::ExplicitBug>
  11:     0x7c17947c88b1 - <rustc_errors[c0761d72276853f8]::diagnostic::BugAbort as rustc_errors[c0761d72276853f8]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  12:     0x7c17946da6fd - <rustc_errors[c0761d72276853f8]::DiagCtxtHandle>::span_bug::<rustc_span[4e9173d9ab4d4daa]::span_encoding::Span, alloc[d4d13292f8c1d48d]::string::String>
  13:     0x7c17946f60d8 - rustc_middle[2422fc0a2a72bca0]::util::bug::opt_span_bug_fmt::<rustc_span[4e9173d9ab4d4daa]::span_encoding::Span>::{closure#0}
  14:     0x7c17946f638a - rustc_middle[2422fc0a2a72bca0]::ty::context::tls::with_opt::<rustc_middle[2422fc0a2a72bca0]::util::bug::opt_span_bug_fmt<rustc_span[4e9173d9ab4d4daa]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  15:     0x7c17946ea51b - rustc_middle[2422fc0a2a72bca0]::ty::context::tls::with_context_opt::<rustc_middle[2422fc0a2a72bca0]::ty::context::tls::with_opt<rustc_middle[2422fc0a2a72bca0]::util::bug::opt_span_bug_fmt<rustc_span[4e9173d9ab4d4daa]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  16:     0x7c179367c547 - rustc_middle[2422fc0a2a72bca0]::util::bug::span_bug_fmt::<rustc_span[4e9173d9ab4d4daa]::span_encoding::Span>
  17:     0x7c17968eb5b4 - <rustc_const_eval[52bfe85ce8cf4586]::interpret::eval_context::InterpCx<rustc_const_eval[52bfe85ce8cf4586]::const_eval::machine::CompileTimeMachine>>::eval_rvalue_into_place
  18:     0x7c17936fadd2 - rustc_const_eval[52bfe85ce8cf4586]::const_eval::eval_queries::eval_to_allocation_raw_provider
  19:     0x7c1796501bb6 - rustc_query_impl[68ff1bc69f23602]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[68ff1bc69f23602]::query_impl::eval_to_allocation_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>
  20:     0x7c1796502bef - <rustc_query_impl[68ff1bc69f23602]::query_impl::eval_to_allocation_raw::dynamic_query::{closure#2} as core[7ac7550d2f2632cb]::ops::function::FnOnce<(rustc_middle[2422fc0a2a72bca0]::ty::context::TyCtxt, rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>)>>::call_once
  21:     0x7c1796502b71 - <rustc_query_system[67db78f99bfebbdc]::query::plumbing::execute_job_incr<rustc_query_impl[68ff1bc69f23602]::DynamicConfig<rustc_query_system[67db78f99bfebbdc]::query::caches::DefaultCache<rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[68ff1bc69f23602]::plumbing::QueryCtxt>::{closure#2}::{closure#2} as core[7ac7550d2f2632cb]::ops::function::FnOnce<((rustc_query_impl[68ff1bc69f23602]::plumbing::QueryCtxt, rustc_query_impl[68ff1bc69f23602]::DynamicConfig<rustc_query_system[67db78f99bfebbdc]::query::caches::DefaultCache<rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>, false, false, false>), rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>)>>::call_once
  22:     0x7c17965181ae - rustc_query_system[67db78f99bfebbdc]::query::plumbing::try_execute_query::<rustc_query_impl[68ff1bc69f23602]::DynamicConfig<rustc_query_system[67db78f99bfebbdc]::query::caches::DefaultCache<rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[68ff1bc69f23602]::plumbing::QueryCtxt, true>
  23:     0x7c17965176b6 - rustc_query_impl[68ff1bc69f23602]::query_impl::eval_to_allocation_raw::get_query_incr::__rust_end_short_backtrace
  24:     0x7c1796502e2e - rustc_const_eval[52bfe85ce8cf4586]::const_eval::eval_queries::eval_to_const_value_raw_provider
  25:     0x7c1796502c36 - rustc_query_impl[68ff1bc69f23602]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[68ff1bc69f23602]::query_impl::eval_to_const_value_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>
  26:     0x7c1796502baf - <rustc_query_impl[68ff1bc69f23602]::query_impl::eval_to_const_value_raw::dynamic_query::{closure#2} as core[7ac7550d2f2632cb]::ops::function::FnOnce<(rustc_middle[2422fc0a2a72bca0]::ty::context::TyCtxt, rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>)>>::call_once
  27:     0x7c1796502b71 - <rustc_query_system[67db78f99bfebbdc]::query::plumbing::execute_job_incr<rustc_query_impl[68ff1bc69f23602]::DynamicConfig<rustc_query_system[67db78f99bfebbdc]::query::caches::DefaultCache<rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[68ff1bc69f23602]::plumbing::QueryCtxt>::{closure#2}::{closure#2} as core[7ac7550d2f2632cb]::ops::function::FnOnce<((rustc_query_impl[68ff1bc69f23602]::plumbing::QueryCtxt, rustc_query_impl[68ff1bc69f23602]::DynamicConfig<rustc_query_system[67db78f99bfebbdc]::query::caches::DefaultCache<rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>, false, false, false>), rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>)>>::call_once
  28:     0x7c17965181ae - rustc_query_system[67db78f99bfebbdc]::query::plumbing::try_execute_query::<rustc_query_impl[68ff1bc69f23602]::DynamicConfig<rustc_query_system[67db78f99bfebbdc]::query::caches::DefaultCache<rustc_middle[2422fc0a2a72bca0]::ty::ParamEnvAnd<rustc_middle[2422fc0a2a72bca0]::mir::interpret::GlobalId>, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[68ff1bc69f23602]::plumbing::QueryCtxt, true>
  29:     0x7c1796517a4c - rustc_query_impl[68ff1bc69f23602]::query_impl::eval_to_const_value_raw::get_query_incr::__rust_end_short_backtrace
  30:     0x7c1796197c3d - <rustc_middle[2422fc0a2a72bca0]::hir::map::Map>::par_body_owners::<rustc_hir_analysis[2606297559afc5bb]::check_crate::{closure#3}>::{closure#0}
  31:     0x7c17961954d2 - rustc_hir_analysis[2606297559afc5bb]::check_crate
  32:     0x7c1796191e05 - rustc_interface[3feab42be5996c7]::passes::run_required_analyses
  33:     0x7c1796a2a29e - rustc_interface[3feab42be5996c7]::passes::analysis
  34:     0x7c1796a2a271 - rustc_query_impl[68ff1bc69f23602]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[68ff1bc69f23602]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 1usize]>>
  35:     0x7c1796f261c1 - rustc_query_system[67db78f99bfebbdc]::query::plumbing::try_execute_query::<rustc_query_impl[68ff1bc69f23602]::DynamicConfig<rustc_query_system[67db78f99bfebbdc]::query::caches::SingleCache<rustc_middle[2422fc0a2a72bca0]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[68ff1bc69f23602]::plumbing::QueryCtxt, true>
  36:     0x7c1796f25e7a - rustc_query_impl[68ff1bc69f23602]::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
  37:     0x7c1796b399de - rustc_interface[3feab42be5996c7]::interface::run_compiler::<core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>, rustc_driver_impl[b1c9e4000593b067]::run_compiler::{closure#0}>::{closure#1}
  38:     0x7c1796bc4990 - std[232e32126cf29c33]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[3feab42be5996c7]::util::run_in_thread_with_globals<rustc_interface[3feab42be5996c7]::util::run_in_thread_pool_with_globals<rustc_interface[3feab42be5996c7]::interface::run_compiler<core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>, rustc_driver_impl[b1c9e4000593b067]::run_compiler::{closure#0}>::{closure#1}, core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>>::{closure#0}, core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>>
  39:     0x7c1796bc4ffa - <<std[232e32126cf29c33]::thread::Builder>::spawn_unchecked_<rustc_interface[3feab42be5996c7]::util::run_in_thread_with_globals<rustc_interface[3feab42be5996c7]::util::run_in_thread_pool_with_globals<rustc_interface[3feab42be5996c7]::interface::run_compiler<core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>, rustc_driver_impl[b1c9e4000593b067]::run_compiler::{closure#0}>::{closure#1}, core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>>::{closure#0}, core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[7ac7550d2f2632cb]::result::Result<(), rustc_span[4e9173d9ab4d4daa]::ErrorGuaranteed>>::{closure#1} as core[7ac7550d2f2632cb]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  40:     0x7c1796bc53eb - std::sys::pal::unix::thread::Thread::new::thread_start::h6e4c0266f3b27cf2
  41:     0x7c179825939d - <unknown>
  42:     0x7c17982de49c - <unknown>
  43:                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.83.0-nightly (55043f067 2024-09-22) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z incremental-verify-ich=yes -C incremental=[REDACTED] -C debuginfo=2 -C link-dead-code=true -Z validate-mir

query stack during panic:
#0 [eval_to_allocation_raw] const-evaluating + checking `_`
#1 [eval_to_const_value_raw] simplifying constant for the type system `_`
end of query stack
error: aborting due to 3 previous errors

Some errors have detailed explanations: E0080, E0601.
For more information about an error, try `rustc --explain E0080`.

@matthiaskrgr matthiaskrgr 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 Sep 22, 2024
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Sep 22, 2024
@matthiaskrgr
Copy link
Member Author

Regression in #127546 cc @workingjubilee

@jieyouxu jieyouxu added the A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) label Sep 22, 2024
@saethlin saethlin removed the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Sep 22, 2024
@saethlin
Copy link
Member

Nope. That PR just changed the size at which things become problematic, which should tell you that the bisection is wrong. If you tweak the constants just a little bit:

pub struct Data([u8; usize::MAX >> 17]);
const _: &'static Data = &Data([0; usize::MAX >> 17]);

This bisects instead to #121557

@workingjubilee
Copy link
Member

is "the compiler OOMs when you try to make it OOM" really a "regression"?

@workingjubilee
Copy link
Member

answer after some discussion: possibly, if it was supposed to stop compilation when it detected it was going to OOM if it continued!

@matthiaskrgr matthiaskrgr added S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. 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. and removed 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 Sep 29, 2024
@RalfJung
Copy link
Member

RalfJung commented Nov 9, 2024

Ah, exciting... there is indeed a way that all constants can fail to evaluate, even those that have been promoted because they seem "infallible".

bors added a commit to rust-lang-ci/rust that referenced this issue Nov 18, 2024
interpret: do not ICE when a promoted fails with OOM

Fixes rust-lang#130687
bors added a commit to rust-lang-ci/rust that referenced this issue Nov 18, 2024
interpret: do not ICE when a promoted fails with OOM

Fixes rust-lang#130687
bors added a commit to rust-lang-ci/rust that referenced this issue Nov 18, 2024
interpret: do not ICE when a promoted fails with OOM

Fixes rust-lang#130687

try-job: aarch64-apple
try-job: dist-x86_64-linux
@bors bors closed this as completed in 89b6885 Nov 19, 2024
github-actions bot pushed a commit to rust-lang/miri that referenced this issue Nov 20, 2024
interpret: do not ICE when a promoted fails with OOM

Fixes rust-lang/rust#130687

try-job: aarch64-apple
try-job: dist-x86_64-linux
lnicola pushed a commit to lnicola/rust-analyzer that referenced this issue Nov 28, 2024
interpret: do not ICE when a promoted fails with OOM

Fixes rust-lang/rust#130687

try-job: aarch64-apple
try-job: dist-x86_64-linux
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) 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. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants