Closed
Description
The following constant function that returns a Generator, ICE's:
#![feature(const_fn)]
#![feature(generators)]
#![feature(generator_trait)]
#![feature(existential_type)]
use std::ops::Generator;
existential type GenOnce<Y, R>: Generator<Yield = Y, Return = R>;
const fn const_generator<Y, R>(yielding: Y, returning: R) -> GenOnce<Y, R> {
move || {
yield yielding;
return returning;
}
}
const foo: GenOnce<usize, usize> = const_generator(10, 100);
fn main() {
}
Backtrace:
thread 'main' panicked at 'index out of bounds: the len is 2 but the index is 2', /checkout/src/librustc_mir/interpret/eval_context.rs:1851:68
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:479
6: std::panicking::continue_panic_fmt
at libstd/panicking.rs:390
7: rust_begin_unwind
at libstd/panicking.rs:325
8: core::panicking::panic_fmt
at libcore/panicking.rs:77
9: core::panicking::panic_bounds_check
at libcore/panicking.rs:59
10: rustc::ty::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::with_freevars
11: <rustc_mir::interpret::eval_context::EvalContext<'a, 'mir, 'tcx, M>>::write_field_name
12: <rustc_mir::interpret::eval_context::EvalContext<'a, 'mir, 'tcx, M>>::validate_ptr_target
13: rustc_lint::builtin::check_const
14: <rustc_lint::register_builtins::BuiltinCombinedLateLintPass as rustc::lint::LateLintPass<'a, 'tcx>>::check_item
15: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item
16: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_mod
17: rustc::hir::intravisit::walk_crate
18: rustc::lint::context::check_crate
19: rustc::util::common::time
20: rustc::ty::context::tls::enter_context
21: <std::thread::local::LocalKey<T>>::with
22: rustc::ty::context::TyCtxt::create_and_enter
23: rustc_driver::driver::compile_input
24: rustc_driver::run_compiler_with_pool
25: syntax::with_globals
26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
27: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:102
28: rustc_driver::run
29: rustc_driver::main
30: std::rt::lang_start::{{closure}}
31: std::panicking::try::do_call
at libstd/rt.rs:59
at libstd/panicking.rs:310
32: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:102
33: std::rt::lang_start_internal
at libstd/panicking.rs:289
at libstd/panic.rs:392
at libstd/rt.rs:58
34: main
35: __libc_start_main
36: <unknown>
query stack during panic:
end of query stack
Metadata
Metadata
Labels
Area: Constant evaluation, covers all const contexts (static, const fn, ...)Area: Coroutines`#![feature(coroutines)]``#[feature(type_alias_impl_trait)]`Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Relevant to the compiler team, which will review and decide on the PR/issue.This issue requires a nightly compiler in some way.
Type
Projects
Status
Done