Skip to content

Commit 8238379

Browse files
committed
update for enum discriminant changes
1 parent 9280d17 commit 8238379

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

src/intrinsic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'mir, 'tcx, super:
198198

199199
"discriminant_value" => {
200200
let place = self.ref_to_mplace(self.read_value(args[0])?)?;
201-
let discr_val = self.read_discriminant_value(place.into())?;
201+
let discr_val = self.read_discriminant(place.into())?.0;
202202
self.write_scalar(Scalar::from_uint(discr_val, dest.layout.size), dest)?;
203203
}
204204

tests/compile-fail/invalid_enum_discriminant.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ pub enum Foo {
88

99
fn main() {
1010
let f = unsafe { std::mem::transmute::<i32, Foo>(42) };
11-
match f {
11+
match f { //~ ERROR invalid enum discriminant
1212
Foo::A => {},
1313
Foo::B => {},
1414
Foo::C => {},
1515
Foo::D => {},
1616
}
17-
} //~ ERROR constant evaluation error
18-
//~^ NOTE entered unreachable code
17+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Validation makes this fail in the wrong place
2+
// compile-flags: -Zmir-emit-validate=0
3+
4+
// error-pattern: invalid enum discriminant
5+
6+
use std::mem;
7+
8+
#[repr(C)]
9+
pub enum Foo {
10+
A, B, C, D
11+
}
12+
13+
fn main() {
14+
let f = unsafe { std::mem::transmute::<i32, Foo>(42) };
15+
let _ = mem::discriminant(&f);
16+
}

0 commit comments

Comments
 (0)