Skip to content

Nested "impl trait" with lifetimes causing internal compiler error #46464

Closed
@kazagistar

Description

@kazagistar

While trying to figure out how to return two iterators over a &str, the compiler crashed.

#![feature(conservative_impl_trait)]
fn parser<'a>(input: &'a str) -> impl Iterator<Item = impl Iterator<Item = i32> + 'a> + 'a {
    input.lines().map(|line| {
        line.split_whitespace().map(|cell| cell.parse().unwrap())
    })
}

Link to playground

Error message: error: internal compiler error: src\librustc\ty\subst.rs:424: Region parameter out of range when substituting in region 'a (root type=None) (index=1)

Meta

rustc --version --verbose:

rustc 1.24.0-nightly (f9b0897c5 2017-12-02)
binary: rustc
commit-hash: f9b0897c5d42a4dfa425db799073c6feb21b0178
commit-date: 2017-12-02
host: x86_64-pc-windows-msvc
release: 1.24.0-nightly
LLVM version: 4.0

Backtrace:

thread 'rustc' panicked at 'Box<Any>', src\librustc_errors\lib.rs:448:8
stack backtrace:
   0: <std::thread::ThreadId as core::fmt::Debug>::fmt
   1: <std::sync::condvar::Condvar as core::fmt::Debug>::fmt
   2: std::panicking::Location::column
   3: std::panicking::Location::column
   4: std::panicking::rust_panic_with_hook
   5: <rustc::ty::instance::InstanceDef<'tcx> as core::fmt::Debug>::fmt
   6: rustc::util::ppaux::<impl core::fmt::Debug for rustc::ty::Predicate<'tcx>>::fmt
   7: rustc::ty::maps::<impl rustc::ty::maps::queries::fully_normalize_monormophic_ty<'tcx>>::try_get
   8: rustc::ty::context::tls::span_debug
   9: rustc::session::bug_fmt
  10: rustc::session::bug_fmt
  11: <rustc::ty::subst::SubstFolder<'a, 'gcx, 'tcx> as rustc::ty::fold::TypeFolder<'gcx, 'tcx>>::fold_region
  12: rustc::ty::error::<impl rustc::ty::TyS<'tcx>>::sort_string
  13: rustc::middle::lang_items::LanguageItems::items
  14: rustc::ty::GenericPredicates::instantiate_own
  15: rustc::ty::GenericPredicates::instantiate
  16: <unknown>
  17: <rustc_typeck::check::upvar::InferBorrowKind<'a, 'gcx, 'tcx> as rustc::middle::expr_use_visitor::Delegate<'tcx>>::mutate
  18: <unknown>
  19: <rustc_typeck::check::GatherLocalsVisitor<'a, 'gcx, 'tcx> as rustc::hir::intravisit::Visitor<'gcx>>::visit_pat
  20: <rustc_typeck::variance::terms::InferredIndex as core::fmt::Debug>::fmt
  21: <rustc_typeck::check::callee::DeferredCallResolution<'gcx, 'tcx> as core::fmt::Debug>::fmt
  22: <rustc_typeck::check::CheckItemTypesVisitor<'a, 'tcx> as rustc::hir::itemlikevisit::ItemLikeVisitor<'tcx>>::visit_item
  23: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::ensure
  24: rustc::dep_graph::graph::DepGraph::in_ignore
  25: rustc::util::ppaux::<impl core::fmt::Debug for rustc::ty::Predicate<'tcx>>::fmt
  26: <rustc::ty::_match::Match<'a, 'gcx, 'tcx> as rustc::ty::relate::TypeRelation<'a, 'gcx, 'tcx>>::tys
  27: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::ensure
  28: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::try_get
  29: rustc::ty::maps::TyCtxtAt::typeck_tables_of
  30: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::ensure
  31: <rustc_typeck::check::upvar::InferBorrowKind<'a, 'gcx, 'tcx> as rustc::middle::expr_use_visitor::Delegate<'tcx>>::mutate
  32: <rustc_typeck::check::CheckItemTypesVisitor<'a, 'tcx> as rustc::hir::itemlikevisit::ItemLikeVisitor<'tcx>>::visit_item
  33: rustc::dep_graph::graph::DepGraph::in_ignore
  34: rustc::util::ppaux::<impl core::fmt::Debug for rustc::ty::Predicate<'tcx>>::fmt
  35: <rustc::ty::_match::Match<'a, 'gcx, 'tcx> as rustc::ty::relate::TypeRelation<'a, 'gcx, 'tcx>>::tys
  36: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_item_bodies<'tcx>>::ensure
  37: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_item_bodies<'tcx>>::try_get
  38: rustc::ty::maps::TyCtxtAt::typeck_item_bodies
  39: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::typeck_item_bodies
  40: rustc_typeck::check_crate
  41: <rustc_driver::derive_registrar::Finder as rustc::hir::itemlikevisit::ItemLikeVisitor<'v>>::visit_impl_item
  42: <rustc_driver::derive_registrar::Finder as rustc::hir::itemlikevisit::ItemLikeVisitor<'v>>::visit_impl_item
  43: <rustc_driver::profile::trace::Query as core::fmt::Debug>::fmt
  44: rustc_driver::driver::compile_input
  45: rustc_driver::run_compiler
  46: rustc_driver::driver::build_output_filenames
  47: _rust_maybe_catch_panic
  48: <rustc_driver::profile::trace::Query as core::fmt::Debug>::fmt
  49: <std::sync::condvar::Condvar as core::fmt::Debug>::fmt
  50: std::sys::windows::thread::Thread::new
  51: BaseThreadInitThunk

Metadata

Metadata

Assignees

No one assigned

    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) ❄️

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions