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> {}

(playground)

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