about summary refs log tree commit diff
path: root/tests/ui/mir/enum/negative_discr_ok.rs
blob: 5c15b33fa8423d1e8044b71bde7bc4092c3096b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//@ 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);
}