Skip to content

Compiler error: returning impl Generator #46504

Closed
@ghost

Description

Moin Leute,
I'm experimenting with the features: conservative_impl_trait, generators, generator trait. rustc got an internal error.
See the code. First I tried to do Yield = T. The compiler complained: expected &&T, found type parameter. So I added &&. That produced the error below.

I tried this code:

#![feature(generators, generator_trait)]
#![feature(conservative_impl_trait)]
use std::ops::Generator;

fn gen<'a, T>(data: Vec<&'a T>)
    -> impl Generator<Yield = &&T, Return = ()> + 'a
{
    move || {
        for d in &data {
            yield d;
        }
    }
}

fn main() {
}

I expected to see this happen:
I don't really know what should have happened instead. I stopped experimenting.

Got this:

error: internal compiler error: /checkout/src/librustc_typeck/check/mod.rs:671: escaping regions in predicate Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: Slice([_]), item_def_id: DefId(2/0:990 ~ core[fa91]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, &'a &'a T)),depth=0)
 --> test.rs:6:8
  |
6 |     -> impl Generator<Yield = &&T, Return = ()> + 'a
  |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.24.0-nightly (0a2e9ade8 2017-11-29) running on x86_64-unknown-linux-gnu

thread 'rustc' panicked at 'Box<Any>', /checkout/src/librustc_errors/lib.rs:448:8
note: Run with `RUST_BACKTRACE=1` for a backtrace.

Meta

rustc --version --verbose:

rustc 1.24.0-nightly (0a2e9ade8 2017-11-29)
binary: rustc
commit-hash: 0a2e9ade83ff253bb489c63a95b1f499c5e0916f
commit-date: 2017-11-29
host: x86_64-unknown-linux-gnu
release: 1.24.0-nightly
LLVM version: 4.0

Full Backtrace:

error: internal compiler error: /checkout/src/librustc_typeck/check/mod.rs:671: escaping regions in predicate Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: Slice([_]), item_def_id: DefId(2/0:990 ~ core[fa91]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, &'a &'a T)),depth=0)
 --> test.rs:6:8
  |
6 |     -> impl Generator<Yield = &&T, Return = ()> + 'a
  |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.24.0-nightly (0a2e9ade8 2017-11-29) running on x86_64-unknown-linux-gnu

note: run with `RUST_BACKTRACE=1` for a backtrace

thread 'rustc' panicked at 'Box<Any>', /checkout/src/librustc_errors/lib.rs:448:8
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::print
             at /checkout/src/libstd/sys_common/backtrace.rs:68
             at /checkout/src/libstd/sys_common/backtrace.rs:57
   2: _ZN3std9panicking12default_hook28_$u7b$$u7b$closure$u7d$$u7d$17hef59f1d15185c20fE.llvm.272A3273
             at /checkout/src/libstd/panicking.rs:381
   3: _ZN3std9panicking12default_hook17h7cc618db9a2c6232E.llvm.272A3273
             at /checkout/src/libstd/panicking.rs:391
   4: std::panicking::rust_panic_with_hook
             at /checkout/src/libstd/panicking.rs:577
   5: std::panicking::begin_panic
   6: rustc_errors::Handler::span_bug
   7: <std::thread::local::LocalKey<T>>::with
   8: rustc::ty::context::tls::with_opt
   9: rustc::session::span_bug_fmt
  10: rustc_typeck::check::Inherited::register_predicate
  11: <rustc::ty::fold::BottomUpFolder<'a, 'gcx, 'tcx, F> as rustc::ty::fold::TypeFolder<'gcx, 'tcx>>::fold_ty
  12: rustc_typeck::check::check_fn
  13: <std::thread::local::LocalKey<T>>::with
  14: rustc::ty::context::GlobalCtxt::enter_local
  15: _ZN12rustc_typeck5check16typeck_tables_of17h804aa91ac012df90E.llvm.DD951B87
  16: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::compute_result
  17: _ZN5rustc9dep_graph5graph8DepGraph14with_task_impl17h97b0ecf2a35a8c3fE.llvm.51E2F59F
  18: rustc_errors::Handler::track_diagnostics
  19: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  20: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::force
  21: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::try_get
  22: rustc::ty::maps::TyCtxtAt::typeck_tables_of
  23: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::typeck_tables_of
  24: _ZN12rustc_typeck5check16typeck_tables_of17h804aa91ac012df90E.llvm.DD951B87
  25: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::compute_result
  26: _ZN5rustc9dep_graph5graph8DepGraph14with_task_impl17h97b0ecf2a35a8c3fE.llvm.51E2F59F
  27: rustc_errors::Handler::track_diagnostics
  28: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  29: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::force
  30: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::try_get
  31: rustc::ty::maps::TyCtxtAt::typeck_tables_of
  32: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::typeck_tables_of
  33: _ZN12rustc_typeck7collect7type_of17h5c750f6b9ff91204E.llvm.6582AFEA
  34: rustc::ty::maps::<impl rustc::ty::maps::queries::type_of<'tcx>>::compute_result
  35: _ZN5rustc9dep_graph5graph8DepGraph14with_task_impl17h26018eebf02eef13E.llvm.51E2F59F
  36: rustc_errors::Handler::track_diagnostics
  37: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  38: rustc::ty::maps::<impl rustc::ty::maps::queries::type_of<'tcx>>::force
  39: rustc::ty::maps::<impl rustc::ty::maps::queries::type_of<'tcx>>::try_get
  40: rustc::ty::maps::TyCtxtAt::type_of
  41: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::type_of
  42: <rustc_typeck::collect::CollectItemTypesVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_expr
  43: <rustc_typeck::collect::CollectItemTypesVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item
  44: rustc::hir::Crate::visit_all_item_likes
  45: rustc::util::common::time
  46: rustc_typeck::check_crate
  47: <std::thread::local::LocalKey<T>>::with
  48: <std::thread::local::LocalKey<T>>::with
  49: rustc::ty::context::TyCtxt::create_and_enter
  50: rustc_driver::driver::compile_input
  51: rustc_driver::run_compiler

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-coroutinesArea: CoroutinesA-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