]> git.lizzy.rs Git - rust.git/blob - src/test/ui/discrim/discrim-overflow-2.rs
Rollup merge of #57229 - mikeyhew:fix-56806, r=varkor
[rust.git] / src / test / ui / discrim / discrim-overflow-2.rs
1 // ignore-tidy-linelength
2
3 // Issue 23030: Detect overflowing discriminant
4 //
5 // Check that we detect the overflow even if enum is not used.
6
7 // See also run-pass/discrim-explicit-23030.rs where the suggested
8 // workaround is tested.
9
10 use std::{i8,u8,i16,u16,i32,u32,i64, u64};
11
12 fn f_i8() {
13     #[repr(i8)]
14     enum A {
15         Ok = i8::MAX - 1,
16         Ok2,
17         OhNo, //~ ERROR enum discriminant overflowed [E0370]
18     }
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
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
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     }
46 }
47
48 fn f_i32() {
49     #[repr(i32)]
50     enum A {
51         Ok = i32::MAX - 1,
52         Ok2,
53         OhNo, //~ ERROR enum discriminant overflowed [E0370]
54     }
55 }
56
57 fn f_u32() {
58     #[repr(u32)]
59     enum A {
60         Ok = u32::MAX - 1,
61         Ok2,
62         OhNo, //~ ERROR enum discriminant overflowed [E0370]
63     }
64 }
65
66 fn f_i64() {
67     #[repr(i64)]
68     enum A {
69         Ok = i64::MAX - 1,
70         Ok2,
71         OhNo, //~ ERROR enum discriminant overflowed [E0370]
72     }
73 }
74
75 fn f_u64() {
76     #[repr(u64)]
77     enum A {
78         Ok = u64::MAX - 1,
79         Ok2,
80         OhNo, //~ ERROR enum discriminant overflowed [E0370]
81     }
82 }
83
84 fn main() { }