Skip to content

Non-implemented trait causes ICE #140462

Open
@dpytaylo

Description

@dpytaylo

Code

use std::marker::PhantomData;

trait Decode<'a>: Sized {
    type Decoder: Decoder<'a, Self>;
}

trait Decoder<'a, T> {}

struct A {
    b: B,
}

impl<'a> Decode<'a> for A
{
    type Decoder = ADecoder<'a>;
}

pub struct ADecoder<'a> {
    b: <B as Decode<'a>>::Decoder,
}

impl<'a> Default for ADecoder<'a> {
    fn default() -> Self {
        Self {
            b: Default::default(),
        }
    }
}

impl<'a> Decoder<'a, A> for ADecoder<'a> {}

struct NonImplementedDecode;

struct B {
    non_implemented: NonImplementedDecode,
    c: C,
}

impl<'a> Decode<'a> for B
{
    type Decoder = BDecoder<'a>;
}
pub struct BDecoder<'a> {
    non_implemented: <NonImplementedDecode as Decode<'a>>::Decoder,
    c: <C as Decode<'a>>::Decoder,
}
impl<'a> Default for BDecoder<'a> {
    fn default() -> Self {
        Self {
            non_implemented: Default::default(),
            c: Default::default(),
        }
    }
}
impl<'a> Decoder<'a, B> for BDecoder<'a> {}

struct C;

impl<'a> Decode<'a> for C
{
    type Decoder = CDecoder<'a>;
}

pub struct CDecoder<'a> {
    __spooky: PhantomData<&'a ()>,
}

impl<'a> Default for CDecoder<'a> {
    fn default() -> Self {
        Self {
            __spooky: Default::default(),
        }
    }
}

impl<'a> Decoder<'a, C> for CDecoder<'a> {}

fn main() {}

Meta

rustc --version --verbose:

rustc 1.88.0-nightly (25cdf1f67 2025-04-28)
binary: rustc
commit-hash: 25cdf1f67463c9365d8d83778c933ec7480e940b
commit-date: 2025-04-28
host: x86_64-unknown-linux-gnu
release: 1.88.0-nightly
LLVM version: 20.1.2

Error output

thread 'rustc' panicked at compiler/rustc_trait_selection/src/traits/normalize.rs:69:17:
Box<dyn Any>
stack backtrace:
   0:     0x7efe738642e5 - std::backtrace::Backtrace::create::h5b5d29f0fcbef4c5
   1:     0x7efe71cf3855 - std::backtrace::Backtrace::force_capture::h46ea152eb057a4f7
   2:     0x7efe70d86011 - std[96024a80e4ce12a0]::panicking::update_hook::<alloc[703cfcb04acfdfda]::boxed::Box<rustc_driver_impl[a2bbb3d7e654019c]::install_ice_hook::{closure#1}>>::{closure#0}
   3:     0x7efe71d0d933 - std::panicking::rust_panic_with_hook::h7afddb00f409503c
   4:     0x7efe70dc1241 - std[96024a80e4ce12a0]::panicking::begin_panic::<rustc_errors[c4bb5e76f42fc126]::ExplicitBug>::{closure#0}
   5:     0x7efe70db5116 - std[96024a80e4ce12a0]::sys::backtrace::__rust_end_short_backtrace::<std[96024a80e4ce12a0]::panicking::begin_panic<rustc_errors[c4bb5e76f42fc126]::ExplicitBug>::{closure#0}, !>
   6:     0x7efe70db5103 - std[96024a80e4ce12a0]::panicking::begin_panic::<rustc_errors[c4bb5e76f42fc126]::ExplicitBug>
   7:     0x7efe70dcb8a1 - <rustc_errors[c4bb5e76f42fc126]::diagnostic::BugAbort as rustc_errors[c4bb5e76f42fc126]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
   8:     0x7efe7136b5ac - <rustc_errors[c4bb5e76f42fc126]::DiagCtxtHandle>::span_bug::<rustc_span[bce202135c071ebd]::span_encoding::Span, alloc[703cfcb04acfdfda]::string::String>
   9:     0x7efe71402f77 - rustc_middle[41c039613f3f9b63]::util::bug::opt_span_bug_fmt::<rustc_span[bce202135c071ebd]::span_encoding::Span>::{closure#0}
  10:     0x7efe713de82a - rustc_middle[41c039613f3f9b63]::ty::context::tls::with_opt::<rustc_middle[41c039613f3f9b63]::util::bug::opt_span_bug_fmt<rustc_span[bce202135c071ebd]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  11:     0x7efe713de69b - rustc_middle[41c039613f3f9b63]::ty::context::tls::with_context_opt::<rustc_middle[41c039613f3f9b63]::ty::context::tls::with_opt<rustc_middle[41c039613f3f9b63]::util::bug::opt_span_bug_fmt<rustc_span[bce202135c071ebd]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  12:     0x7efe6f9c70e7 - rustc_middle[41c039613f3f9b63]::util::bug::span_bug_fmt::<rustc_span[bce202135c071ebd]::span_encoding::Span>
  13:     0x7efe72c3e955 - <rustc_infer[d90e9b374f743bff]::infer::at::At as rustc_trait_selection[7f49cd931f6e56ae]::traits::normalize::NormalizeExt>::deeply_normalize::<rustc_middle[41c039613f3f9b63]::ty::Ty, rustc_infer[d90e9b374f743bff]::traits::engine::ScrubbedTraitError>
  14:     0x7efe71ba3b01 - <rustc_trait_selection[7f49cd931f6e56ae]::traits::engine::ObligationCtxt>::deeply_normalize::<rustc_middle[41c039613f3f9b63]::ty::Ty>
  15:     0x7efe7258ac68 - rustc_trait_selection[7f49cd931f6e56ae]::traits::query::dropck_outlives::compute_dropck_outlives_inner
  16:     0x7efe7294909a - rustc_traits[a378416fae6313f9]::dropck_outlives::dropck_outlives
  17:     0x7efe72948b66 - rustc_query_impl[b776171e91563e8b]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b776171e91563e8b]::query_impl::dropck_outlives::dynamic_query::{closure#2}::{closure#0}, rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 8usize]>>
  18:     0x7efe72948b2b - <rustc_query_impl[b776171e91563e8b]::query_impl::dropck_outlives::dynamic_query::{closure#2} as core[6d7144d1d4266374]::ops::function::FnOnce<(rustc_middle[41c039613f3f9b63]::ty::context::TyCtxt, rustc_type_ir[56906a3c7296c975]::canonical::CanonicalQueryInput<rustc_middle[41c039613f3f9b63]::ty::context::TyCtxt, rustc_middle[41c039613f3f9b63]::ty::ParamEnvAnd<rustc_middle[41c039613f3f9b63]::traits::query::type_op::DropckOutlives>>)>>::call_once
  19:     0x7efe72948aed - <rustc_query_system[aa926e5a14f6203b]::query::plumbing::execute_job_incr<rustc_query_impl[b776171e91563e8b]::DynamicConfig<rustc_query_system[aa926e5a14f6203b]::query::caches::DefaultCache<rustc_type_ir[56906a3c7296c975]::canonical::CanonicalQueryInput<rustc_middle[41c039613f3f9b63]::ty::context::TyCtxt, rustc_middle[41c039613f3f9b63]::ty::ParamEnvAnd<rustc_middle[41c039613f3f9b63]::traits::query::type_op::Normalize<rustc_middle[41c039613f3f9b63]::ty::Ty>>>, rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[b776171e91563e8b]::plumbing::QueryCtxt>::{closure#2}::{closure#2} as core[6d7144d1d4266374]::ops::function::FnOnce<((rustc_query_impl[b776171e91563e8b]::plumbing::QueryCtxt, rustc_query_impl[b776171e91563e8b]::DynamicConfig<rustc_query_system[aa926e5a14f6203b]::query::caches::DefaultCache<rustc_type_ir[56906a3c7296c975]::canonical::CanonicalQueryInput<rustc_middle[41c039613f3f9b63]::ty::context::TyCtxt, rustc_middle[41c039613f3f9b63]::ty::ParamEnvAnd<rustc_middle[41c039613f3f9b63]::traits::query::type_op::Normalize<rustc_middle[41c039613f3f9b63]::ty::Ty>>>, rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 8usize]>>, false, false, false>), rustc_type_ir[56906a3c7296c975]::canonical::CanonicalQueryInput<rustc_middle[41c039613f3f9b63]::ty::context::TyCtxt, rustc_middle[41c039613f3f9b63]::ty::ParamEnvAnd<rustc_middle[41c039613f3f9b63]::traits::query::type_op::Normalize<rustc_middle[41c039613f3f9b63]::ty::Ty>>>)>>::call_once
  20:     0x7efe7292cf0e - rustc_query_system[aa926e5a14f6203b]::query::plumbing::try_execute_query::<rustc_query_impl[b776171e91563e8b]::DynamicConfig<rustc_query_system[aa926e5a14f6203b]::query::caches::DefaultCache<rustc_type_ir[56906a3c7296c975]::canonical::CanonicalQueryInput<rustc_middle[41c039613f3f9b63]::ty::context::TyCtxt, rustc_middle[41c039613f3f9b63]::ty::ParamEnvAnd<rustc_middle[41c039613f3f9b63]::traits::query::type_op::DropckOutlives>>, rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[b776171e91563e8b]::plumbing::QueryCtxt, true>
  21:     0x7efe7292c813 - rustc_query_impl[b776171e91563e8b]::query_impl::dropck_outlives::get_query_incr::__rust_end_short_backtrace
  22:     0x7efe72c4b0a3 - <rustc_borrowck[c484d48ab0116751]::type_check::liveness::trace::LivenessContext>::compute_drop_data
  23:     0x7efe6efc6c38 - rustc_borrowck[c484d48ab0116751]::type_check::liveness::trace::trace
  24:     0x7efe73630f6b - rustc_borrowck[c484d48ab0116751]::do_mir_borrowck
  25:     0x7efe73611b11 - rustc_borrowck[c484d48ab0116751]::mir_borrowck
  26:     0x7efe73611999 - rustc_query_impl[b776171e91563e8b]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b776171e91563e8b]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 8usize]>>
  27:     0x7efe726273e9 - rustc_query_system[aa926e5a14f6203b]::query::plumbing::try_execute_query::<rustc_query_impl[b776171e91563e8b]::DynamicConfig<rustc_data_structures[9557117c3f8f3a0]::vec_cache::VecCache<rustc_span[bce202135c071ebd]::def_id::LocalDefId, rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[aa926e5a14f6203b]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[b776171e91563e8b]::plumbing::QueryCtxt, true>
  28:     0x7efe7266bc0b - rustc_query_impl[b776171e91563e8b]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
  29:     0x7efe72e0701c - rustc_interface[269edf8a537b00a5]::passes::run_required_analyses
  30:     0x7efe732a915e - rustc_interface[269edf8a537b00a5]::passes::analysis
  31:     0x7efe732a9133 - rustc_query_impl[b776171e91563e8b]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b776171e91563e8b]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 0usize]>>
  32:     0x7efe736d727f - rustc_query_system[aa926e5a14f6203b]::query::plumbing::try_execute_query::<rustc_query_impl[b776171e91563e8b]::DynamicConfig<rustc_query_system[aa926e5a14f6203b]::query::caches::SingleCache<rustc_middle[41c039613f3f9b63]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[b776171e91563e8b]::plumbing::QueryCtxt, true>
  33:     0x7efe736d6cb5 - rustc_query_impl[b776171e91563e8b]::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
  34:     0x7efe7338f3be - rustc_interface[269edf8a537b00a5]::passes::create_and_enter_global_ctxt::<core[6d7144d1d4266374]::option::Option<rustc_interface[269edf8a537b00a5]::queries::Linker>, rustc_driver_impl[a2bbb3d7e654019c]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
  35:     0x7efe734eceb9 - rustc_interface[269edf8a537b00a5]::interface::run_compiler::<(), rustc_driver_impl[a2bbb3d7e654019c]::run_compiler::{closure#0}>::{closure#1}
  36:     0x7efe73301728 - std[96024a80e4ce12a0]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[269edf8a537b00a5]::util::run_in_thread_with_globals<rustc_interface[269edf8a537b00a5]::util::run_in_thread_pool_with_globals<rustc_interface[269edf8a537b00a5]::interface::run_compiler<(), rustc_driver_impl[a2bbb3d7e654019c]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  37:     0x7efe73301b74 - <<std[96024a80e4ce12a0]::thread::Builder>::spawn_unchecked_<rustc_interface[269edf8a537b00a5]::util::run_in_thread_with_globals<rustc_interface[269edf8a537b00a5]::util::run_in_thread_pool_with_globals<rustc_interface[269edf8a537b00a5]::interface::run_compiler<(), rustc_driver_impl[a2bbb3d7e654019c]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[6d7144d1d4266374]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  38:     0x7efe73302f77 - std::sys::pal::unix::thread::Thread::new::thread_start::h7eeb46109c9d7745
  39:     0x7efe6d2a8144 - <unknown>
  40:     0x7efe6d3287dc - <unknown>
  41:                0x0 - <unknown>


rustc version: 1.88.0-nightly (25cdf1f67 2025-04-28)
platform: x86_64-unknown-linux-gnu

query stack during panic:
#0 [dropck_outlives] computing dropck types for `ADecoder<'_>`
#1 [mir_borrowck] borrow-checking `<impl at src/main.rs:22:1: 22:34>::default`
#2 [analysis] running analysis passes on this crate
end of query stack
Backtrace

$ RUST_BACKTRACE=1 cargo build
   Compiling untitled v0.1.0 (/home/user/code/untitled)
error[E0277]: the trait bound `NonImplementedDecode: Decode<'a>` is not satisfied
  --> src/main.rs:44:22
   |
44 |     non_implemented: <NonImplementedDecode as Decode<'a>>::Decoder,
   |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Decode<'a>` is not implemented for `NonImplementedDecode`
   |
   = help: the following other types implement trait `Decode<'a>`:
             A
             B
             C

error[E0277]: the trait bound `NonImplementedDecode: Decode<'a>` is not satisfied
  --> src/main.rs:50:13
   |
50 |             non_implemented: Default::default(),
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Decode<'a>` is not implemented for `NonImplementedDecode`
   |
   = help: the following other types implement trait `Decode<'a>`:
             A
             B
             C

error: internal compiler error: compiler/rustc_trait_selection/src/traits/normalize.rs:69:17: deeply_normalize should not be called with pending obligations: [
                                    Obligation(predicate=Binder { value: OutlivesPredicate('?0, '?0), bound_vars: [] }, depth=0),
                                ]


thread 'rustc' panicked at compiler/rustc_trait_selection/src/traits/normalize.rs:69:17:
Box<dyn Any>
stack backtrace:
   0: std::panicking::begin_panic::<rustc_errors::ExplicitBug>
   1: <rustc_errors::diagnostic::BugAbort as rustc_errors::diagnostic::EmissionGuarantee>::emit_producing_guarantee
   2: <rustc_errors::DiagCtxtHandle>::span_bug::<rustc_span::span_encoding::Span, alloc::string::String>
   3: rustc_middle::util::bug::opt_span_bug_fmt::<rustc_span::span_encoding::Span>::{closure#0}
   4: rustc_middle::ty::context::tls::with_opt::<rustc_middle::util::bug::opt_span_bug_fmt<rustc_span::span_encoding::Span>::{closure#0}, !>::{closure#0}
   5: rustc_middle::ty::context::tls::with_context_opt::<rustc_middle::ty::context::tls::with_opt<rustc_middle::util::bug::opt_span_bug_fmt<rustc_span::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
   6: rustc_middle::util::bug::span_bug_fmt::<rustc_span::span_encoding::Span>
   7: <rustc_infer::infer::at::At as rustc_trait_selection::traits::normalize::NormalizeExt>::deeply_normalize::<rustc_middle::ty::Ty, rustc_infer::traits::engine::ScrubbedTraitError>
   8: <rustc_trait_selection::traits::engine::ObligationCtxt>::deeply_normalize::<rustc_middle::ty::Ty>
   9: rustc_trait_selection::traits::query::dropck_outlives::compute_dropck_outlives_inner
  10: rustc_traits::dropck_outlives::dropck_outlives
      [... omitted 3 frames ...]
  11: <rustc_borrowck::type_check::liveness::trace::LivenessContext>::compute_drop_data
  12: rustc_borrowck::type_check::liveness::trace::trace
  13: rustc_borrowck::do_mir_borrowck
  14: rustc_borrowck::mir_borrowck
      [... omitted 1 frame ...]
  15: rustc_interface::passes::run_required_analyses
  16: rustc_interface::passes::analysis
      [... omitted 1 frame ...]
  17: 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}
  18: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

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: please attach the file at `/home/user/code/untitled/rustc-ice-2025-04-29T14_42_17-21412.txt` to your bug report

note: compiler flags: --crate-type bin -C embed-bitcode=no -C debuginfo=2 -C incremental=[REDACTED] -C link-arg=-fuse-ld=lld

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
#0 [dropck_outlives] computing dropck types for `ADecoder<'_>`
#1 [mir_borrowck] borrow-checking `<impl at src/main.rs:22:1: 22:34>::default`
#2 [analysis] running analysis passes on this crate
end of query stack
For more information about this error, try `rustc --explain E0277`.
error: could not compile `untitled` (bin "untitled") due to 2 previous errors

Metadata

Metadata

Labels

C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-lowLow priorityS-has-bisectionStatus: a bisection has been found for this issueS-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issueT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-typesRelevant to the types team, which will review and decide on the PR/issue.regression-from-stable-to-betaPerformance or correctness regression from stable to beta.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions