54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
|
|
//@ run-pass
|
||
|
|
//@ compile-flags: -C debug-assertions
|
||
|
|
|
||
|
|
#[allow(dead_code)]
|
||
|
|
#[derive(Debug, PartialEq)]
|
||
|
|
enum Foo {
|
||
|
|
A = -12121,
|
||
|
|
B = -2,
|
||
|
|
C = -1,
|
||
|
|
D = 1,
|
||
|
|
E = 2,
|
||
|
|
F = 12121,
|
||
|
|
}
|
||
|
|
|
||
|
|
#[allow(dead_code)]
|
||
|
|
#[repr(i64)]
|
||
|
|
#[derive(Debug, PartialEq)]
|
||
|
|
enum Bar {
|
||
|
|
A = i64::MIN,
|
||
|
|
B = -2,
|
||
|
|
C = -1,
|
||
|
|
D = 1,
|
||
|
|
E = 2,
|
||
|
|
F = i64::MAX,
|
||
|
|
}
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
let val: Foo = unsafe { std::mem::transmute::<i16, Foo>(-12121) };
|
||
|
|
assert_eq!(val, Foo::A);
|
||
|
|
let val: Foo = unsafe { std::mem::transmute::<i16, Foo>(-2) };
|
||
|
|
assert_eq!(val, Foo::B);
|
||
|
|
let val: Foo = unsafe { std::mem::transmute::<i16, Foo>(-1) };
|
||
|
|
assert_eq!(val, Foo::C);
|
||
|
|
let val: Foo = unsafe { std::mem::transmute::<i16, Foo>(1) };
|
||
|
|
assert_eq!(val, Foo::D);
|
||
|
|
let val: Foo = unsafe { std::mem::transmute::<i16, Foo>(2) };
|
||
|
|
assert_eq!(val, Foo::E);
|
||
|
|
let val: Foo = unsafe { std::mem::transmute::<i16, Foo>(12121) };
|
||
|
|
assert_eq!(val, Foo::F);
|
||
|
|
|
||
|
|
let val: Bar = unsafe { std::mem::transmute::<i64, Bar>(i64::MIN) };
|
||
|
|
assert_eq!(val, Bar::A);
|
||
|
|
let val: Bar = unsafe { std::mem::transmute::<i64, Bar>(-2) };
|
||
|
|
assert_eq!(val, Bar::B);
|
||
|
|
let val: Bar = unsafe { std::mem::transmute::<i64, Bar>(-1) };
|
||
|
|
assert_eq!(val, Bar::C);
|
||
|
|
let val: Bar = unsafe { std::mem::transmute::<i64, Bar>(1) };
|
||
|
|
assert_eq!(val, Bar::D);
|
||
|
|
let val: Bar = unsafe { std::mem::transmute::<i64, Bar>(2) };
|
||
|
|
assert_eq!(val, Bar::E);
|
||
|
|
let val: Bar = unsafe { std::mem::transmute::<i64, Bar>(i64::MAX) };
|
||
|
|
assert_eq!(val, Bar::F);
|
||
|
|
}
|