Skip to content

ICE: impl for<'a> Hrtb<'a, Assoc = impl Send + 'a> #88236

Description

@WaffleLapkin

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::marker::Send as std::marker::Sized>), []), Binder(OutlivesPredicate(impl for<'a> std::marker::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::marker::Send as std::marker::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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

A-impl-traitArea: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch.C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️I-crashIssue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics.P-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.glacierICE tracked in rust-lang/glacier.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions