update for enum discriminant changes
This commit is contained in:
parent
9280d17d98
commit
823837922b
3 changed files with 19 additions and 4 deletions
|
|
@ -198,7 +198,7 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'mir, 'tcx, super:
|
|||
|
||||
"discriminant_value" => {
|
||||
let place = self.ref_to_mplace(self.read_value(args[0])?)?;
|
||||
let discr_val = self.read_discriminant_value(place.into())?;
|
||||
let discr_val = self.read_discriminant(place.into())?.0;
|
||||
self.write_scalar(Scalar::from_uint(discr_val, dest.layout.size), dest)?;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,10 @@ pub enum Foo {
|
|||
|
||||
fn main() {
|
||||
let f = unsafe { std::mem::transmute::<i32, Foo>(42) };
|
||||
match f {
|
||||
match f { //~ ERROR invalid enum discriminant
|
||||
Foo::A => {},
|
||||
Foo::B => {},
|
||||
Foo::C => {},
|
||||
Foo::D => {},
|
||||
}
|
||||
} //~ ERROR constant evaluation error
|
||||
//~^ NOTE entered unreachable code
|
||||
}
|
||||
|
|
|
|||
16
tests/compile-fail/invalid_enum_discriminant2.rs
Normal file
16
tests/compile-fail/invalid_enum_discriminant2.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
// Validation makes this fail in the wrong place
|
||||
// compile-flags: -Zmir-emit-validate=0
|
||||
|
||||
// error-pattern: invalid enum discriminant
|
||||
|
||||
use std::mem;
|
||||
|
||||
#[repr(C)]
|
||||
pub enum Foo {
|
||||
A, B, C, D
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let f = unsafe { std::mem::transmute::<i32, Foo>(42) };
|
||||
let _ = mem::discriminant(&f);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue