Interpreter calls discriminant_for_variant on zero variant enum · Issue #89765 · rust-lang/rust (original) (raw)

@tmiasko

Interpreter calls discriminant_for_variant on zero variant enum, when asked unsafely to do so :-).

Code

#![feature(const_discriminant)] #![feature(const_raw_ptr_deref)]

pub enum Void { }

pub const C: () = { unsafe { std::mem::discriminant(&*(&() as *const () as *const Void)); }; };

Error

error: internal compiler error: /rustc/41dfaaa3c66759395835b3af59b22f4f22175dc8/compiler/rustc_middle/src/ty/sty.rs:2009:17: discriminant_for_variant called on zero variant enum

thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1146:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

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

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.57.0-nightly (41dfaaa3c 2021-10-10) running on x86_64-unknown-linux-gnu

note: compiler flags: --crate-type lib

query stack during panic:
#0 [eval_to_allocation_raw] const-evaluating + checking `C`
#1 [eval_to_const_value_raw] simplifying constant for the type system `C`
end of query stack
error: aborting due to previous error

@rustbot label: +requires-nightly +A-const-eval