Closed
Description
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
...