]> git.lizzy.rs Git - rust.git/blob - src/test/ui/discrim/discrim-overflow.rs
Merge commit '03f01bbe901d60b71cf2c5ec766aef5e532ab79d' into update_cg_clif-2020...
[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 use std::{i8,u8,i16,u16,i32,u32,i64, u64};
7
8 fn f_i8() {
9     #[repr(i8)]
10     enum A {
11         Ok = i8::MAX - 1,
12         Ok2,
13         OhNo, //~ ERROR enum discriminant overflowed [E0370]
14     }
15
16     let x = A::Ok;
17 }
18
19 fn f_u8() {
20     #[repr(u8)]
21     enum A {
22         Ok = u8::MAX - 1,
23         Ok2,
24         OhNo, //~ ERROR enum discriminant overflowed [E0370]
25     }
26
27     let x = A::Ok;
28 }
29
30 fn f_i16() {
31     #[repr(i16)]
32     enum A {
33         Ok = i16::MAX - 1,
34         Ok2,
35         OhNo, //~ ERROR enum discriminant overflowed [E0370]
36     }
37
38     let x = A::Ok;
39 }
40
41 fn f_u16() {
42     #[repr(u16)]
43     enum A {
44         Ok = u16::MAX - 1,
45         Ok2,
46         OhNo, //~ ERROR enum discriminant overflowed [E0370]
47               //~| overflowed on value after 65535
48     }
49
50     let x = A::Ok;
51 }
52
53 fn f_i32() {
54     #[repr(i32)]
55     enum A {
56         Ok = i32::MAX - 1,
57         Ok2,
58         OhNo, //~ ERROR enum discriminant overflowed [E0370]
59               //~| overflowed on value after 2147483647
60     }
61
62     let x = A::Ok;
63 }
64
65 fn f_u32() {
66     #[repr(u32)]
67     enum A {
68         Ok = u32::MAX - 1,
69         Ok2,
70         OhNo, //~ ERROR enum discriminant overflowed [E0370]
71               //~| overflowed on value after 4294967295
72     }
73
74     let x = A::Ok;
75 }
76
77 fn f_i64() {
78     #[repr(i64)]
79     enum A {
80         Ok = i64::MAX - 1,
81         Ok2,
82         OhNo, //~ ERROR enum discriminant overflowed [E0370]
83               //~| overflowed on value after 9223372036854775807
84     }
85
86     let x = A::Ok;
87 }
88
89 fn f_u64() {
90     #[repr(u64)]
91     enum A {
92         Ok = u64::MAX - 1,
93         Ok2,
94         OhNo, //~ ERROR enum discriminant overflowed [E0370]
95               //~| overflowed on value after 18446744073709551615
96     }
97
98     let x = A::Ok;
99 }
100
101 fn main() { }