Description
Code
I'm a complete Rust newbie and most of the time I have no idea of what I'm doing. So my source code is probably completely weird and f*cked up by the standards of a seasoned Rust developer. Still, I don't think my compiler should be panicking :) Also please note that the source code is definitely not even supposed to compile, it DOES have a number of syntax errors, however, I would expect a reasonable error message explaining what I'm doing wrong.
The whole project can be found here: XXX
Big thanks to @fee1-dead who has minimized the code to a very simple test case that crashes the compiler: #91594 (comment)
I also found several similar bugs reported but I'm still not sure if this is a duplicate or not. Similar bug reports:
#55765
#25036
To reproduce:
cargo build
Meta
The bug does exist in the current nightly build.
rustc --version --verbose
:
rustc 1.57.0 (f1edd0429 2021-11-29)
binary: rustc
commit-hash: f1edd0429582dd29cccacaf50fd134b05593bd9c
commit-date: 2021-11-29
host: x86_64-apple-darwin
release: 1.57.0
LLVM version: 13.0.0
Error output
error: internal compiler error: compiler/rustc_trait_selection/src/traits/select/mod.rs:2072:17: Impl DefId(0:335 ~ map_server[3b29]::mapserver::endpoints::map_endpoint::{impl#2}) was matchable against Obligation(predicate=Binder(TraitPredicate(<mapserver::endpoints::map_endpoint::map_endpoint as shaku::HasComponent<(dyn mapserver::environment::map::Map + 'static)>>, polarity:Positive), []), depth=3) but now is not
thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1170: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.59.0-nightly (e2116acae 2021-12-05) running on x86_64-apple-darwin
note: compiler flags: -C embed-bitcode=no -C split-debuginfo=unpacked -C debuginfo=2 -C incremental --crate-type bin
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [evaluate_obligation] evaluating trait selection obligation `mapserver::endpoints::map_endpoint::map_endpoint: shaku::module::module_traits::ModuleInterface` | = note: this failure-note originates in the macro `module` (in Nightly builds, run with -Z macro-backtrace for more info)
#1 [check_item_well_formed] checking that `mapserver::endpoints::map_endpoint::<impl at src/mapserver/endpoints/map_endpoint.rs:8:1: 13:2>` is well-formed
end of query stack
warning: `map-server` (bin "map-server") generated 5 warnings
error: could not compile `map-server`; 5 warnings emitted
Backtrace
thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1146: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::util::bug::opt_span_bug_fmt::{{closure}}
5: rustc_middle::ty::context::tls::with_opt::{{closure}}
6: rustc_middle::ty::context::tls::with_opt
7: rustc_middle::util::bug::opt_span_bug_fmt
8: rustc_middle::util::bug::bug_fmt
9: rustc_infer::infer::InferCtxt::commit_unconditionally
10: rustc_trait_selection::traits::select::confirmation::<impl rustc_trait_selection::traits::select::SelectionContext>::confirm_candidate
11: rustc_infer::infer::InferCtxt::probe
12: rustc_trait_selection::traits::select::SelectionContext::evaluate_stack
13: rustc_query_system::dep_graph::graph::DepGraph<K>::with_anon_task
14: rustc_trait_selection::traits::select::SelectionContext::evaluate_trait_predicate_recursively
15: rustc_data_structures::stack::ensure_sufficient_stack
16: rustc_trait_selection::traits::select::SelectionContext::evaluate_predicate_recursively
17: rustc_trait_selection::traits::select::SelectionContext::evaluate_predicates_recursively
18: rustc_infer::infer::InferCtxt::probe
19: rustc_trait_selection::traits::select::SelectionContext::evaluate_stack
20: rustc_query_system::dep_graph::graph::DepGraph<K>::with_anon_task
21: rustc_trait_selection::traits::select::SelectionContext::evaluate_trait_predicate_recursively
22: rustc_data_structures::stack::ensure_sufficient_stack
23: rustc_trait_selection::traits::select::SelectionContext::evaluate_predicate_recursively
24: rustc_trait_selection::traits::select::SelectionContext::evaluate_predicates_recursively
25: rustc_infer::infer::InferCtxt::probe
26: rustc_trait_selection::traits::select::SelectionContext::evaluate_stack
27: rustc_query_system::dep_graph::graph::DepGraph<K>::with_anon_task
28: rustc_trait_selection::traits::select::SelectionContext::evaluate_trait_predicate_recursively
29: rustc_data_structures::stack::ensure_sufficient_stack
30: rustc_trait_selection::traits::select::SelectionContext::evaluate_predicate_recursively
31: rustc_infer::infer::InferCtxt::probe
32: rustc_trait_selection::traits::select::SelectionContext::evaluate_root_obligation
33: rustc_infer::infer::InferCtxtBuilder::enter_with_canonical
34: rustc_traits::evaluate_obligation::evaluate_obligation
35: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task
36: rustc_data_structures::stack::ensure_sufficient_stack
37: rustc_query_system::query::plumbing::try_execute_query
38: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::evaluate_obligation
39: <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt>::evaluate_obligation
40: <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt>::evaluate_obligation_no_overflow
41: rustc_trait_selection::traits::fulfill::FulfillProcessor::process_trait_obligation
42: rustc_trait_selection::traits::fulfill::FulfillProcessor::progress_changed_obligations
43: rustc_data_structures::obligation_forest::ObligationForest<O>::process_obligations
44: rustc_trait_selection::traits::fulfill::FulfillmentContext::select
45: <rustc_trait_selection::traits::fulfill::FulfillmentContext as rustc_infer::traits::engine::TraitEngine>::select_with_constness_where_possible
46: <rustc_trait_selection::traits::fulfill::FulfillmentContext as rustc_infer::traits::engine::TraitEngine>::select_all_with_constness_or_error
47: rustc_typeck::check::fn_ctxt::_impl::<impl rustc_typeck::check::fn_ctxt::FnCtxt>::select_all_obligations_or_error
48: rustc_infer::infer::InferCtxtBuilder::enter
49: rustc_typeck::check::wfcheck::check_item_well_formed
50: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task
51: rustc_data_structures::stack::ensure_sufficient_stack
52: rustc_query_system::query::plumbing::try_execute_query
53: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::check_item_well_formed
54: <rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor as rustc_hir::intravisit::Visitor>::visit_item
55: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
56: rustc_data_structures::sync::par_for_each_in
57: rustc_session::session::Session::track_errors
58: rustc_typeck::check_crate
59: rustc_interface::passes::analysis
60: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task
61: rustc_data_structures::stack::ensure_sufficient_stack
62: rustc_query_system::query::plumbing::try_execute_query
63: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::analysis
64: rustc_interface::passes::QueryContext::enter
65: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
66: rustc_span::with_source_map
67: scoped_tls::ScopedKey<T>::set
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
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.57.0 (f1edd0429 2021-11-29) running on x86_64-apple-darwin
note: compiler flags: -C embed-bitcode=no -C split-debuginfo=unpacked -C debuginfo=2 -C incremental --crate-type bin
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [evaluate_obligation] evaluating trait selection obligation `mapserver::endpoints::map_endpoint::map_endpoint: shaku::module::module_traits::ModuleInterface` | = note: this failure-note originates in the macro `module` (in Nightly builds, run with -Z macro-backtrace for more info)
#1 [check_item_well_formed] checking that `mapserver::endpoints::map_endpoint::<impl at src/mapserver/endpoints/map_endpoint.rs:8:1: 13:2>` is well-formed
#2 [analysis] running analysis passes on this crate
end of query stack
warning: `map-server` (bin "map-server") generated 5 warnings
error: could not compile `map-server`; 5 warnings emitted