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