Closed
Description
Code
#![feature(min_type_alias_impl_trait, generator_trait, generators)]
use std::ops::{Generator};
pub trait GeneratorProviderAlt: Sized {
type Gen: Generator<(), Return=(), Yield=()>;
fn start(ctx: Context<Self>) -> Self::Gen;
}
pub struct Context<G: 'static + GeneratorProviderAlt> {
// back-link to our generator state
// In reality some other pointer type, but Box triggers the bug
// Also in reality, points to a wrapper struct that only indirectly holds
// the generator state.
link: Box<G::Gen>,
}
impl GeneratorProviderAlt for () {
type Gen = impl Generator<(), Return=(), Yield=()>;
fn start(ctx: Context<Self>) -> Self::Gen {
move || {
match ctx { _ => () } // make sure to use the context
yield ();
}
}
}
I haven't gotten it to error without nightly features, so I believe it has to do with the generated enum for the Generator.
Meta
rustc --version --verbose
:
rustc 1.55.0-nightly (952fdf2a1 2021-07-05)
binary: rustc
commit-hash: 952fdf2a1119affa1b37bcacb0c49cf9f0168ac8
commit-date: 2021-07-05
host: x86_64-unknown-linux-gnu
release: 1.55.0-nightly
LLVM version: 12.0.1
Error output
error: internal compiler error: compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs:150:13: type metadata for unique ID '324a3be6bacbf95688e06d88c8981eb0' is already in the `TypeMap`!
Backtrace
thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1034:9
stack backtrace:
0: std::panicking::begin_panic
1: std::panic::panic_any
2: rustc_errors::HandlerInner::bug
3: rustc_errors::Handler::bug
4: rustc_middle::ty::context::tls::with_opt
5: rustc_middle::util::bug::opt_span_bug_fmt
6: rustc_middle::util::bug::bug_fmt
7: rustc_codegen_llvm::debuginfo::metadata::create_and_register_recursive_type_forward_declaration
8: rustc_codegen_llvm::debuginfo::metadata::prepare_enum_metadata
9: rustc_codegen_llvm::debuginfo::metadata::type_metadata
10: rustc_codegen_llvm::debuginfo::<impl rustc_codegen_ssa::traits::debuginfo::DebugInfoMethods for rustc_codegen_llvm::context::CodegenCx>::dbg_scope_fn::get_function_signature
11: rustc_codegen_llvm::debuginfo::<impl rustc_codegen_ssa::traits::debuginfo::DebugInfoMethods for rustc_codegen_llvm::context::CodegenCx>::dbg_scope_fn
12: rustc_codegen_ssa::mir::codegen_mir
13: rustc_codegen_ssa::base::codegen_instance
14: <rustc_middle::mir::mono::MonoItem as rustc_codegen_ssa::mono_item::MonoItemExt>::define
15: rustc_codegen_llvm::base::compile_codegen_unit::module_codegen
16: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task
17: rustc_codegen_llvm::base::compile_codegen_unit
18: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate
19: rustc_interface::passes::QueryContext::enter
20: rustc_interface::queries::Queries::ongoing_codegen
21: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
22: rustc_span::with_source_map
23: rustc_interface::interface::create_compiler_and_run
24: scoped_tls::ScopedKey<T>::set
As an aside, if one gets rid of the Box
, this fails (kind of expected, though the error message could be improved) with
error[E0391]: cycle detected when computing layout of `[generator@src/lib.rs:21:9: 24:10]`
|
= note: ...which requires computing layout of `Context<()>`...
= note: ...which again requires computing layout of `[generator@src/lib.rs:21:9: 24:10]`, completing the cycle
note: cycle used when optimizing MIR for `<impl at src/lib.rs:18:1: 26:2>::start`
--> src/lib.rs:20:5
Metadata
Metadata
Assignees
Labels
Area: CoroutinesCategory: This is a bug.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.`#![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.ICE tracked in rust-lang/glacier.
Type
Projects
Status
Done