Skip to content

ICE with generators #51624

Closed
Closed
@tuxmark5

Description

@tuxmark5

This snippet causes rustc to ICE:

#![feature(generators)]
#![feature(generator_trait)]

use std::marker::PhantomData;
use std::ops::Generator;

trait Trait: 'static { }

struct Index<T: ?Sized = dyn Trait> {
  id: i32, ty: PhantomData<T>
}

fn new_index() -> Index { Index { id: 10, ty: PhantomData } }

fn with_ctx<F: FnOnce(&mut i32) -> T, T>(f: F) -> T {
  let mut ctx = 123; 
  f(&mut ctx)
}

fn accept_gen<G: Generator>(g: G) { }

fn main() {
  accept_gen(static move || {
    let poll = with_ctx(|ctx| new_index());
    yield 20;
  });
}

Version: rustc 1.28.0-nightly (86a8f1a 2018-06-17)

Partial error message:

thread 'main' panicked at 'assertion failed: !value.has_escaping_regions()', librustc/ty/sty.rs:745:9
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::print
             at libstd/sys_common/backtrace.rs:71
             at libstd/sys_common/backtrace.rs:59
   2: std::panicking::default_hook::{{closure}}
             at libstd/panicking.rs:211
   3: std::panicking::default_hook
             at libstd/panicking.rs:227
   4: rustc::util::common::panic_hook
   5: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:515
   6: std::panicking::begin_panic
   7: rustc::ty::wf::WfPredicates::compute
   8: rustc::ty::wf::obligations
   9: <rustc::traits::fulfill::FulfillmentContext<'tcx> as rustc::traits::engine::TraitEngine<'tcx>>::select_where_possible
  10: <rustc::traits::fulfill::FulfillmentContext<'tcx> as rustc::traits::engine::TraitEngine<'tcx>>::select_all_or_error
  11: rustc_typeck::check::FnCtxt::select_all_obligations_or_error
...

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-coroutinesArea: CoroutinesA-trait-systemArea: Trait systemI-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