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: "Missing value for constant, but no error reported?" with unresolvabe const due to trivial bounds #135617

Open
FedericoBruzzone opened this issue Jan 17, 2025 · 4 comments
Labels
A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) C-bug Category: This is a bug. F-trivial_bounds `#![feature(trivial_bounds)]` 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.

Comments

@FedericoBruzzone
Copy link
Contributor

FedericoBruzzone commented Jan 17, 2025

Code

playground

#![feature(trivial_bounds)]

trait Project {
    const ASSOC: usize;
}

fn foo()
where
    (): Project,
{
    [(); <() as Project>::ASSOC];
}

Rust Version

`rustc +nightly --version --verbose`:
rustc 1.86.0-nightly (99db2737c 2025-01-16)
binary: rustc
commit-hash: 99db2737c91d1e4b36b2ffc17dcda5878bcae625
commit-date: 2025-01-16
host: x86_64-unknown-linux-gnu
release: 1.86.0-nightly
LLVM version: 19.1.7

Current error output

error: internal compiler error: Missing value for constant, but no error reported?
  --> tests/ui/layout/uneval-const-rigid.rs:11:5
   |
11 |     [(); <() as Project>::ASSOC];
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: delayed at compiler/rustc_trait_selection/src/traits/const_evaluatable.rs:132:44 - disabled backtrace
  --> tests/ui/layout/uneval-const-rigid.rs:11:5
   |
11 |     [(); <() as Project>::ASSOC];
   |

Backtrace

error: internal compiler error: Missing value for constant, but no error reported?
  --> tmp.rs:11:5
   |
11 |     [(); <() as Project>::ASSOC];
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: delayed at compiler/rustc_trait_selection/src/traits/const_evaluatable.rs:132:44
         0: <rustc_errors::DiagCtxtInner>::emit_diagnostic
         1: <rustc_errors::DiagCtxtHandle>::emit_diagnostic
         2: <rustc_span::ErrorGuaranteed as rustc_errors::diagnostic::EmissionGuarantee>::emit_producing_guarantee
         3: <rustc_errors::DiagCtxtHandle>::span_delayed_bug::<rustc_span::span_encoding::Span, &str>
         4: rustc_trait_selection::traits::const_evaluatable::is_const_evaluatable.cold
         5: <rustc_trait_selection::traits::fulfill::FulfillProcessor as rustc_data_structures::obligation_forest::ObligationProcessor>::process_obligation
         6: <rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection::traits::fulfill::FulfillProcessor>
         7: rustc_hir_typeck::typeck_with_fallback::{closure#0}
         8: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::typeck::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
         9: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
        10: rustc_query_impl::query_impl::typeck::get_query_non_incr::__rust_end_short_backtrace
        11: <rustc_middle::hir::map::Map>::par_body_owners::<rustc_hir_analysis::check_crate::{closure#4}>::{closure#0}
        12: rustc_hir_analysis::check_crate
        13: rustc_interface::passes::run_required_analyses
        14: rustc_interface::passes::analysis
        15: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 0]>>
        16: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
        17: rustc_query_impl::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
        18: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
        19: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
        20: std::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
        21: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
        22: std::sys::pal::unix::thread::Thread::new::thread_start
        23: <unknown>
        24: <unknown>

Anything else?

This error was found during this PR, in the addition of TooGeneric as LayoutError.

Updates on this issue will be added later if found.

cc: @lukas-code

@FedericoBruzzone FedericoBruzzone 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 Jan 17, 2025
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Jan 17, 2025
@FedericoBruzzone FedericoBruzzone changed the title ICE: "Missing value for constant, but no error reported?" with uncomputable layout due to trivial bounds on ICE: "Missing value for constant, but no error reported?" with uncomputable layout due to trivial bounds (unevaluated constants is rigid) Jan 17, 2025
@FedericoBruzzone FedericoBruzzone changed the title ICE: "Missing value for constant, but no error reported?" with uncomputable layout due to trivial bounds (unevaluated constants is rigid) ICE: "Missing value for constant, but no error reported?" with uncomputable layout due to trivial bounds (unevaluated constant is rigid) Jan 17, 2025
@theemathas
Copy link
Contributor

Version that produces the ICE without unstable features:

trait Project {
    const ASSOC: usize;
}

fn foo()
where
    for<'a> (): Project,
{
    [(); <() as Project>::ASSOC];
}

@matthiaskrgr
Copy link
Member

might be dupe of #135138

@FedericoBruzzone
Copy link
Contributor Author

might be dupe of #135138

This is not actually a duplicated of #135138.
That ICE (#135138) will be fixed soon in this PR, but this ICE will remains.

@lukas-code lukas-code changed the title ICE: "Missing value for constant, but no error reported?" with uncomputable layout due to trivial bounds (unevaluated constant is rigid) ICE: "Missing value for constant, but no error reported?" with unresolvabe const due to trivial bounds Jan 17, 2025
@lukas-code lukas-code added A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) F-trivial_bounds `#![feature(trivial_bounds)]` and removed needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Jan 17, 2025
@lukas-code
Copy link
Member

This is unrelated to layout computation and happens because we always treat resolution errors in const eval as TooGeneric even if there are no generics:

Ok(None) => Err(ErrorHandled::TooGeneric(DUMMY_SP)),


@theemathas FYI this for<'a> trick only sidesteps the feature gate for compatibility reasons and should not be considered stable behavior. All issues related to feature(trivial_bounds) can be reproduced without a feature gate by putting a binder in front of the trivial bounds.

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. F-trivial_bounds `#![feature(trivial_bounds)]` 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.
Projects
None yet
Development

No branches or pull requests

5 participants