Skip to content

ICE: compiler/rustc_typeck/src/hir_wf_check.rs:133:29: Unexpected TraitItem Const #87536

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

Closed
ghost opened this issue Jul 28, 2021 · 1 comment
Closed
Labels
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.

Comments

@ghost
Copy link

ghost commented Jul 28, 2021

The ICE triggers for traits with associated consts whose types are some generic struct, but not always.

Code

Checking each trait is a bit of a chore, going through and commenting/uncommenting whichever trait is to be tested. If there's a better way to format this I'm all ears!

mod without_copy {
    struct GenericStruct<T>(T);

    // No ICE
    trait TraitWithTypeAndConst {
        type Type;
        const CONST: GenericStruct<Self::Type>;
    }

    // ICE
    trait TraitWithConstOnly {
        const CONST: GenericStruct<Self>;
    }

    // No ICE
    trait TraitWithoutSelfReference {
        const CONST: GenericStruct<f32>;
    }
}

mod with_copy {
    struct GenericStruct<T: Copy>(T);

    // ICE
    trait TraitWithTypeAndConst {
        type Type;
        const CONST: GenericStruct<Self::Type>;
    }

    // ICE
    trait TraitWithConstOnly {
        const CONST: GenericStruct<Self>;
    }

    // No ICE
    trait TraitWithoutSelfReference {
        const CONST: GenericStruct<f32>;
    }
}

mod with_blank_trait {
    trait Blank {}

    struct GenericStruct<T: Blank>(T);

    // ICE
    trait TraitWithTypeAndConst {
        type Type;
        const CONST: GenericStruct<Self::Type>;
    }

    // ICE
    trait TraitWithConstOnly {
        const CONST: GenericStruct<Self>;
    }

    // ICE
    trait TraitWithoutSelfReference {
        const CONST: GenericStruct<f32>;
    }
}

mod with_blank_trait_and_generic_impl {
    trait Blank {}
    impl<T> Blank for T {}

    struct GenericStruct<T: Blank>(T);

    // No ICE
    trait TraitWithTypeAndConst {
        type Type;
        const CONST: GenericStruct<Self::Type>;
    }

    // ICE
    trait TraitWithConstOnly {
        const CONST: GenericStruct<Self>;
    }

    // NO ICE
    trait TraitWithoutSelfReference {
        const CONST: GenericStruct<f32>;
    }
}

Note how each module has the same 3 traits as each other, the only difference from module to module is the bounds on the referenced type (GenericStruct) and the trait being bound. Interestingly it gets stranger as the blank trait changes the ICE triggering depending on if the trait has the generic impl block (impl<T> Blank for T {}) or not.

Meta

rustc --version --verbose:

rustc 1.56.0-nightly (2faabf579 2021-07-27)
binary: rustc
commit-hash: 2faabf579323f5252329264cc53ba9ff803429a3
commit-date: 2021-07-27
host: x86_64-unknown-linux-gnu
release: 1.56.0-nightly
LLVM version: 12.0.1

Error output

error: internal compiler error: compiler/rustc_typeck/src/hir_wf_check.rs:133:29: Unexpected TraitItem Const(Ty { hir_id: HirId { owner: DefId(0:52 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::TraitWithConstOnly::CONST), local_id: 1 }, kind: Path(Resolved(None, Path { span: ice_on_example/src/lib.rs:79:22: 79:48 (#0), res: Def(Struct, DefId(0:44 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::GenericNewTypeStruct)), segments: [PathSegment { ident: GenericNewTypeStruct#0, hir_id: Some(HirId { owner: DefId(0:52 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::TraitWithConstOnly::CONST), local_id: 4 }), res: Some(Err), args: Some(GenericArgs { args: [Type(Ty { hir_id: HirId { owner: DefId(0:52 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::TraitWithConstOnly::CONST), local_id: 2 }, kind: Path(Resolved(None, Path { span: ice_on_example/src/lib.rs:79:43: 79:47 (#0), res: SelfTy(Some(DefId(0:51 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::TraitWithConstOnly)), None), segments: [PathSegment { ident: Self#0, hir_id: Some(HirId { owner: DefId(0:52 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::TraitWithConstOnly::CONST), local_id: 3 }), res: Some(SelfTy(Some(DefId(0:51 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::TraitWithConstOnly)), None)), args: None, infer_args: false }] })), span: ice_on_example/src/lib.rs:79:43: 79:47 (#0) })], bindings: [], parenthesized: false, span_ext: ice_on_example/src/lib.rs:79:42: 79:48 (#0) }), infer_args: false }] })), span: ice_on_example/src/lib.rs:79:22: 79:48 (#0) }, None)

thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1034:9

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.56.0-nightly (2faabf579 2021-07-27) running on x86_64-unknown-linux-gnu

note: compiler flags: -C embed-bitcode=no -C debuginfo=2 -C incremental --crate-type lib

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

query stack during panic:
#0 [diagnostic_hir_wf_check] performing HIR wf-checking for predicate Binder(TraitPredicate(<Self as std::marker::Sized>), []) at item Ty(DefId(0:52 ~ ice_on_example[788e]::with_blank_trait_and_generic_impl::TraitWithConstOnly::CONST))
#1 [check_trait_item_well_formed] checking that `with_blank_trait_and_generic_impl::TraitWithConstOnly::CONST` is well-formed
end of query stack
Backtrace

thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1034:9
stack backtrace:
   0: std::panicking::begin_panic
   1: std::panic::panic_any
   2: rustc_errors::HandlerInner::bug
   3: rustc_errors::Handler::bug
   4: rustc_middle::ty::context::tls::with_opt
   5: rustc_middle::util::bug::opt_span_bug_fmt
   6: rustc_middle::util::bug::bug_fmt
   7: rustc_typeck::hir_wf_check::diagnostic_hir_wf_check
   8: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
   9: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  10: rustc_data_structures::stack::ensure_sufficient_stack
  11: rustc_query_system::query::plumbing::get_query_impl
  12: rustc_query_system::query::plumbing::get_query
  13: <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::error_reporting::InferCtxtExt>::report_selection_error
  14: <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::error_reporting::InferCtxtPrivExt>::report_fulfillment_error
  15: <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::error_reporting::InferCtxtExt>::report_fulfillment_errors
  16: rustc_typeck::check::fn_ctxt::_impl::<impl rustc_typeck::check::fn_ctxt::FnCtxt>::select_all_obligations_or_error
  17: rustc_infer::infer::InferCtxtBuilder::enter
  18: rustc_typeck::check::wfcheck::check_associated_item
  19: rustc_typeck::check::wfcheck::check_trait_item
  20: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  21: rustc_data_structures::stack::ensure_sufficient_stack
  22: rustc_query_system::query::plumbing::force_query_with_job
  23: rustc_query_system::query::plumbing::get_query_impl
  24: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::check_trait_item_well_formed
  25: <rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor as rustc_hir::intravisit::Visitor>::visit_trait_item
  26: std::panicking::try
  27: rustc_data_structures::sync::par_for_each_in
  28: rustc_session::session::Session::track_errors
  29: rustc_typeck::check_crate
  30: rustc_interface::passes::analysis
  31: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  32: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  33: rustc_query_system::dep_graph::graph::DepGraph<K>::with_eval_always_task
  34: rustc_data_structures::stack::ensure_sufficient_stack
  35: rustc_query_system::query::plumbing::force_query_with_job
  36: rustc_query_system::query::plumbing::get_query_impl
  37: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::analysis
  38: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
  39: rustc_span::with_source_map
  40: rustc_interface::interface::create_compiler_and_run
  41: scoped_tls::ScopedKey<T>::set

Full Backtrace

thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1034:9
stack backtrace:
   0:     0x7f435c6dbf50 - std::backtrace_rs::backtrace::libunwind::trace::h99dbb39dca18857d
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
   1:     0x7f435c6dbf50 - std::backtrace_rs::backtrace::trace_unsynchronized::h832861927e9cfedf
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f435c6dbf50 - std::sys_common::backtrace::_print_fmt::h3d18154c77dcf310
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/sys_common/backtrace.rs:67:5
   3:     0x7f435c6dbf50 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::he312f4ad5b9bb346
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/sys_common/backtrace.rs:46:22
   4:     0x7f435c749bbc - core::fmt::write::h9a6d9c74526a6c1b
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/core/src/fmt/mod.rs:1115:17
   5:     0x7f435c6cd835 - std::io::Write::write_fmt::h6aced00850e8186f
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/io/mod.rs:1665:15
   6:     0x7f435c6dfc6b - std::sys_common::backtrace::_print::h65d996766de40da4
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/sys_common/backtrace.rs:49:5
   7:     0x7f435c6dfc6b - std::sys_common::backtrace::print::h40df9727e635f303
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/sys_common/backtrace.rs:36:9
   8:     0x7f435c6dfc6b - std::panicking::default_hook::{{closure}}::hd2da4327dea91a51
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/panicking.rs:208:50
   9:     0x7f435c6df741 - std::panicking::default_hook::h3d55120ad6ada158
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/panicking.rs:225:9
  10:     0x7f435cebc611 - rustc_driver::DEFAULT_HOOK::{{closure}}::{{closure}}::h6c854bb74ca75dad
  11:     0x7f435c6e0499 - std::panicking::rust_panic_with_hook::hf85dd0bb545e3b55
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/panicking.rs:626:17
  12:     0x7f435de9ba5b - std::panicking::begin_panic::{{closure}}::hecbebe18226bf241
  13:     0x7f435de9b9e6 - std::sys_common::backtrace::__rust_end_short_backtrace::h7570b823de984483
  14:     0x7f435de9ddbf - std::panicking::begin_panic::hbfbf0ff6f7e9a2e1
  15:     0x7f435deb2e3d - std::panic::panic_any::h9b58b69598db8d52
  16:     0x7f435deb5c5a - rustc_errors::HandlerInner::bug::h69b8d780df20db9a
  17:     0x7f435deb5710 - rustc_errors::Handler::bug::h04eb0f7808456322
  18:     0x7f435de0e8bc - rustc_middle::ty::context::tls::with_opt::hcefda774443605fb
  19:     0x7f435de0eac0 - rustc_middle::util::bug::opt_span_bug_fmt::hbf4f38c7426a3da9
  20:     0x7f435de0ea36 - rustc_middle::util::bug::bug_fmt::h23a56cbc4ca6dee5
  21:     0x7f435d2898b3 - rustc_typeck::hir_wf_check::diagnostic_hir_wf_check::h4eeb4465ffb9baf1
  22:     0x7f435d859bae - rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps::h181e3b555d8516a3
  23:     0x7f435d833887 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::h94a4aef86133f1c1
  24:     0x7f435d914bf3 - rustc_data_structures::stack::ensure_sufficient_stack::hfdcca5a77f101ca2
  25:     0x7f435d698431 - rustc_query_system::query::plumbing::get_query_impl::h7b79b9ba10dfa38b
  26:     0x7f435d735d16 - rustc_query_system::query::plumbing::get_query::h0f5eb8b87a1351b7
  27:     0x7f435dc14bce - <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::error_reporting::InferCtxtExt>::report_selection_error::h8b9e7817a71eb078
  28:     0x7f435dc1a6bf - <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::error_reporting::InferCtxtPrivExt>::report_fulfillment_error::h51e13a2e8b00d126
  29:     0x7f435dc1360c - <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::error_reporting::InferCtxtExt>::report_fulfillment_errors::h7fc1f37867d2ac3b
  30:     0x7f435e0a6f77 - rustc_typeck::check::fn_ctxt::_impl::<impl rustc_typeck::check::fn_ctxt::FnCtxt>::select_all_obligations_or_error::hac60e5de99c6ed2e
  31:     0x7f435e10e50b - rustc_infer::infer::InferCtxtBuilder::enter::hbf587ccc526e62c3
  32:     0x7f435e0f1146 - rustc_typeck::check::wfcheck::check_associated_item::h2994e164cfdef394
  33:     0x7f435ebddb11 - rustc_typeck::check::wfcheck::check_trait_item::hd9a198cd47f2a1c4
  34:     0x7f435ef29a68 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::h0ea966f60fb357b0
  35:     0x7f435efc119a - rustc_data_structures::stack::ensure_sufficient_stack::hfa8b4053572632ab
  36:     0x7f435ee8633c - rustc_query_system::query::plumbing::force_query_with_job::h4ca6d0d2005ce713
  37:     0x7f435e55fe72 - rustc_query_system::query::plumbing::get_query_impl::hcc942fc8702b5655
  38:     0x7f435ef1791b - <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::check_trait_item_well_formed::hd5c993c6aad595fb
  39:     0x7f435ebe0f39 - <rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor as rustc_hir::intravisit::Visitor>::visit_trait_item::h81653c7fe5f91145
  40:     0x7f435e0da813 - std::panicking::try::he384848f9f20c194
  41:     0x7f435e13d1cb - rustc_data_structures::sync::par_for_each_in::h4c89b4235e43cb38
  42:     0x7f435ebf4b2f - rustc_session::session::Session::track_errors::h45cdfa5727dc4520
  43:     0x7f435ebe8243 - rustc_typeck::check_crate::h699147646121a6a3
  44:     0x7f435e9cf80f - rustc_interface::passes::analysis::h50d0de1731ee4f37
  45:     0x7f435d86be73 - rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps::hcbaeaa9eea970ee4
  46:     0x7f435d83cc07 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::he6199cbb439e376a
  47:     0x7f435d8400f9 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_eval_always_task::h28179af5692a308b
  48:     0x7f435d9135ae - rustc_data_structures::stack::ensure_sufficient_stack::heb8eff9f07414442
  49:     0x7f435d6c826d - rustc_query_system::query::plumbing::force_query_with_job::h739ef3432ad7844a
  50:     0x7f435ee71506 - rustc_query_system::query::plumbing::get_query_impl::hfb328957edb27639
  51:     0x7f435ef13b7d - <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::analysis::h6e8468093d45449b
  52:     0x7f435e9a3e98 - rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter::h3903b65ffca1d745
  53:     0x7f435e99298c - rustc_span::with_source_map::hdc8c4c7d7611fe77
  54:     0x7f435e9a50ba - rustc_interface::interface::create_compiler_and_run::hbe7a78745769ff96
  55:     0x7f435e997e19 - scoped_tls::ScopedKey<T>::set::ha164143a03306a1b
  56:     0x7f435e993eba - std::sys_common::backtrace::__rust_begin_short_backtrace::h4dd3c27220dda569
  57:     0x7f435e993335 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h546778848e9193e6
  58:     0x7f435c6eca27 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h09f167e08fc945ff
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/alloc/src/boxed.rs:1572:9
  59:     0x7f435c6eca27 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hf814fe85eeb118e0
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/alloc/src/boxed.rs:1572:9
  60:     0x7f435c6eca27 - std::sys::unix::thread::Thread::new::thread_start::hb71b17934c5f5e68
                               at /rustc/2faabf579323f5252329264cc53ba9ff803429a3/library/std/src/sys/unix/thread.rs:91:17
  61:     0x7f435c60a259 - start_thread
  62:     0x7f435c51f5e3 - __GI___clone
  63:                0x0 - <unknown>

I came across these ICE working on a project depending on the one that triggered this ICE, I wonder if the 2 issues are possibly related.

@ghost ghost 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 Jul 28, 2021
@JohnTitor
Copy link
Member

Duplicate of #87495, should be fixed by #87524. Thanks for reporting anyway!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
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.
Projects
None yet
Development

No branches or pull requests

1 participant