]> git.lizzy.rs Git - rust.git/blob - src/test/ui/consts/cast-discriminant-zst-enum.rs
use iter:: before free functions
[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 a i32.
3
4 #[derive(Copy, Clone)]
5 enum Nums {
6     NegOne = -1,
7 }
8
9 const NEG_ONE_I8: i8 = Nums::NegOne as i8;
10 const NEG_ONE_I16: i16 = Nums::NegOne as i16;
11 const NEG_ONE_I32: i32 = Nums::NegOne as i32;
12 const NEG_ONE_I64: i64 = Nums::NegOne as i64;
13 const NEG_ONE_I128: i128 = Nums::NegOne as i128;
14
15 #[inline(never)]
16 fn identity<T>(t: T) -> T { t }
17
18 fn test_as_arg(n: Nums) {
19     assert_eq!(-1i8, n as i8);
20     assert_eq!(-1i16, n as i16);
21     assert_eq!(-1i32, n as i32);
22     assert_eq!(-1i64, n as i64);
23     assert_eq!(-1i128, n as i128);
24 }
25
26 fn main() {
27     let kind = Nums::NegOne;
28     assert_eq!(-1i8, kind as i8);
29     assert_eq!(-1i16, kind as i16);
30     assert_eq!(-1i32, kind as i32);
31     assert_eq!(-1i64, kind as i64);
32     assert_eq!(-1i128, kind as i128);
33
34     assert_eq!(-1i8, identity(kind) as i8);
35     assert_eq!(-1i16, identity(kind) as i16);
36     assert_eq!(-1i32, identity(kind) as i32);
37     assert_eq!(-1i64, identity(kind) as i64);
38     assert_eq!(-1i128, identity(kind) as i128);
39
40     test_as_arg(Nums::NegOne);
41
42     assert_eq!(-1i8, NEG_ONE_I8);
43     assert_eq!(-1i16, NEG_ONE_I16);
44     assert_eq!(-1i32, NEG_ONE_I32);
45     assert_eq!(-1i64, NEG_ONE_I64);
46     assert_eq!(-1i128, NEG_ONE_I128);
47 }