]> git.lizzy.rs Git - rust.git/blob - src/test/ui/consts/cast-discriminant-zst-enum.rs
Do not suggest `let_else` if no bindings would be introduced
[rust.git] / src / test / ui / consts / cast-discriminant-zst-enum.rs
1 // run-pass
2 // Test a ZST enum whose dicriminant is ~0i128. This caused an ICE when casting to an i32.
3 #![feature(bench_black_box)]
4 use std::hint::black_box;
5
6 #[derive(Copy, Clone)]
7 enum Nums {
8     NegOne = -1,
9 }
10
11 const NEG_ONE_I8: i8 = Nums::NegOne as i8;
12 const NEG_ONE_I16: i16 = Nums::NegOne as i16;
13 const NEG_ONE_I32: i32 = Nums::NegOne as i32;
14 const NEG_ONE_I64: i64 = Nums::NegOne as i64;
15 const NEG_ONE_I128: i128 = Nums::NegOne as i128;
16
17 fn test_as_arg(n: Nums) {
18     assert_eq!(-1i8, n as i8);
19     assert_eq!(-1i16, n as i16);
20     assert_eq!(-1i32, n as i32);
21     assert_eq!(-1i64, n as i64);
22     assert_eq!(-1i128, n as i128);
23 }
24
25 fn main() {
26     let kind = Nums::NegOne;
27     assert_eq!(-1i8, kind as i8);
28     assert_eq!(-1i16, kind as i16);
29     assert_eq!(-1i32, kind as i32);
30     assert_eq!(-1i64, kind as i64);
31     assert_eq!(-1i128, kind as i128);
32
33     assert_eq!(-1i8, black_box(kind) as i8);
34     assert_eq!(-1i16, black_box(kind) as i16);
35     assert_eq!(-1i32, black_box(kind) as i32);
36     assert_eq!(-1i64, black_box(kind) as i64);
37     assert_eq!(-1i128, black_box(kind) as i128);
38
39     test_as_arg(Nums::NegOne);
40
41     assert_eq!(-1i8, NEG_ONE_I8);
42     assert_eq!(-1i16, NEG_ONE_I16);
43     assert_eq!(-1i32, NEG_ONE_I32);
44     assert_eq!(-1i64, NEG_ONE_I64);
45     assert_eq!(-1i128, NEG_ONE_I128);
46 }