]> git.lizzy.rs Git - rust.git/blob - src/test/ui/discrim/discrim-overflow.rs
Update tests to remove old numeric constants
[rust.git] / src / test / ui / discrim / discrim-overflow.rs
1 // Issue 23030: Detect overflowing discriminant
2
3 // See also run-pass/discrim-explicit-23030.rs where the suggested
4 // workaround is tested.
5
6 fn f_i8() {
7     #[repr(i8)]
8     enum A {
9         Ok = i8::MAX - 1,
10         Ok2,
11         OhNo, //~ ERROR enum discriminant overflowed [E0370]
12     }
13
14     let x = A::Ok;
15 }
16
17 fn f_u8() {
18     #[repr(u8)]
19     enum A {
20         Ok = u8::MAX - 1,
21         Ok2,
22         OhNo, //~ ERROR enum discriminant overflowed [E0370]
23     }
24
25     let x = A::Ok;
26 }
27
28 fn f_i16() {
29     #[repr(i16)]
30     enum A {
31         Ok = i16::MAX - 1,
32         Ok2,
33         OhNo, //~ ERROR enum discriminant overflowed [E0370]
34     }
35
36     let x = A::Ok;
37 }
38
39 fn f_u16() {
40     #[repr(u16)]
41     enum A {
42         Ok = u16::MAX - 1,
43         Ok2,
44         OhNo, //~ ERROR enum discriminant overflowed [E0370]
45               //~| overflowed on value after 65535
46     }
47
48     let x = A::Ok;
49 }
50
51 fn f_i32() {
52     #[repr(i32)]
53     enum A {
54         Ok = i32::MAX - 1,
55         Ok2,
56         OhNo, //~ ERROR enum discriminant overflowed [E0370]
57               //~| overflowed on value after 2147483647
58     }
59
60     let x = A::Ok;
61 }
62
63 fn f_u32() {
64     #[repr(u32)]
65     enum A {
66         Ok = u32::MAX - 1,
67         Ok2,
68         OhNo, //~ ERROR enum discriminant overflowed [E0370]
69               //~| overflowed on value after 4294967295
70     }
71
72     let x = A::Ok;
73 }
74
75 fn f_i64() {
76     #[repr(i64)]
77     enum A {
78         Ok = i64::MAX - 1,
79         Ok2,
80         OhNo, //~ ERROR enum discriminant overflowed [E0370]
81               //~| overflowed on value after 9223372036854775807
82     }
83
84     let x = A::Ok;
85 }
86
87 fn f_u64() {
88     #[repr(u64)]
89     enum A {
90         Ok = u64::MAX - 1,
91         Ok2,
92         OhNo, //~ ERROR enum discriminant overflowed [E0370]
93               //~| overflowed on value after 18446744073709551615
94     }
95
96     let x = A::Ok;
97 }
98
99 fn main() { }