ICE: impl for<'a> Hrtb<'a, Assoc = impl Send + 'a> · Issue #88236 · rust-lang/rust (original) (raw)
Code
trait Hrtb<'a> { type Assoc; }
impl<'a> Hrtb<'a> for () { type Assoc = (); }
fn make_impl() -> impl for<'a> Hrtb<'a, Assoc = impl Send + 'a> {}
Comment
I was trying to make an associated type of hrtb-impl Trait
Send
without changing the Trait
. I was mostly expecting that this won't work, but this also ICEs.
Meta
rustc 1.56.0-nightly (d3e2578c3 2021-08-21) running on x86_64-unknown-linux-gnu
Error output
thread 'rustc' panicked at 'Normalizing [Binder(TraitPredicate(<impl for<'a> std:📑:Send as std:📑:Sized>), []), Binder(OutlivesPredicate(impl for<'a> std:📑:Send, ReLateBound(DebruijnIndex(1), BoundRegion { var: 0, kind: BrNamed(DefId(0:19 ~ playground[14a5]::make_impl::{opaque#0}::'a), 'a) })), []), Binder(TraitPredicate(<impl for<'a> std:📑:Send as std:📑:Send>), [])] without wrapping in a `Binder`', compiler/rustc_trait_selection/src/traits/project.rs:332:9
Backtrace
stack backtrace:
0: rust_begin_unwind
at /rustc/d3e2578c31688619ddc0a10ddf8543bf4ebcba5b/library/std/src/panicking.rs:517:5
1: std::panicking::begin_panic_fmt
at /rustc/d3e2578c31688619ddc0a10ddf8543bf4ebcba5b/library/std/src/panicking.rs:460:5
2: rustc_trait_selection::traits::project::AssocTypeNormalizer::fold
3: rustc_trait_selection::traits::project::normalize
4: <rustc_infer::infer::InferCtxt as rustc_trait_selection::infer::InferCtxtExt>::partially_normalize_associated_types_in
5: rustc_trait_selection::opaque_types::Instantiator::fold_opaque_ty
6: <rustc_middle::ty::fold::BottomUpFolder<F,G,H> as rustc_middle::ty::fold::TypeFolder>::fold_ty
7: rustc_middle::ty::fold::TypeFoldable::fold_with
8: rustc_trait_selection::opaque_types::Instantiator::fold_opaque_ty
9: <rustc_middle::ty::fold::BottomUpFolder<F,G,H> as rustc_middle::ty::fold::TypeFolder>::fold_ty
10: rustc_trait_selection::opaque_types::Instantiator::instantiate_opaque_types_in_map
11: rustc_typeck::check::fn_ctxt::_impl::<impl rustc_typeck::check::fn_ctxt::FnCtxt>::instantiate_opaque_types_from_value
12: rustc_typeck::check::check::check_fn
13: rustc_infer::infer::InferCtxtBuilder::enter
14: rustc_typeck::check::typeck
15: rustc_query_system::query::plumbing::get_query_impl
16: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::typeck
17: rustc_middle::ty::context::TyCtxt::typeck_opt_const_arg
18: rustc_mir_build::build::mir_built
19: rustc_query_system::query::plumbing::get_query_impl
20: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_built
21: rustc_mir::transform::check_unsafety::unsafety_check_result
22: core::ops::function::FnOnce::call_once
23: rustc_query_system::query::plumbing::get_query_impl
24: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::unsafety_check_result
25: rustc_mir::transform::mir_const
26: rustc_query_system::query::plumbing::get_query_impl
27: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_const
28: rustc_mir::transform::mir_promoted
29: rustc_query_system::query::plumbing::get_query_impl
30: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_promoted
31: rustc_mir::borrow_check::mir_borrowck
32: core::ops::function::FnOnce::call_once
33: rustc_query_system::query::plumbing::get_query_impl
34: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_borrowck
35: rustc_typeck::collect::type_of::type_of
36: rustc_query_system::query::plumbing::get_query_impl
37: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::type_of
38: rustc_typeck::check::check::check_item_type
39: rustc_middle::hir::map::Map::visit_item_likes_in_module
40: rustc_typeck::check::check::check_mod_item_types
41: rustc_query_system::query::plumbing::get_query_impl
42: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::check_mod_item_types
43: rustc_session::utils::<impl rustc_session::session::Session>::time
44: rustc_typeck::check_crate
45: rustc_interface::passes::analysis
46: rustc_query_system::query::plumbing::get_query_impl
47: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::analysis
48: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
49: rustc_span::with_source_map
50: scoped_tls::ScopedKey<T>::set
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
query stack during panic:
#0 [typeck] type-checking `make_impl`
#1 [mir_built] building MIR for `make_impl`
#2 [unsafety_check_result] unsafety-checking `make_impl`
#3 [mir_const] processing MIR for `make_impl`
#4 [mir_promoted] processing `make_impl`
#5 [mir_borrowck] borrow-checking `make_impl`
#6 [type_of] computing type of `make_impl::{opaque#0}`
#7 [check_mod_item_types] checking item types in top-level module
#8 [analysis] running analysis passes on this crate
end of query stack