]> git.lizzy.rs Git - rust.git/blob - src/test/ui/discrim/discrim-ill-typed.rs
Rollup merge of #100479 - compiler-errors:argument-type-error-improvements, r=lcnr
[rust.git] / src / test / ui / discrim / discrim-ill-typed.rs
1 // When explicit discriminant value has
2 // a type that does not match the representation
3 // type, rustc should fail gracefully.
4
5 // See also run-pass/discrim-explicit-23030.rs where the input types
6 // are correct.
7
8 #![allow(dead_code, unused_variables, unused_imports)]
9
10 fn f_i8() {
11     #[repr(i8)]
12     enum A {
13         Ok = i8::MAX - 1,
14         Ok2,
15         OhNo = 0_u8,
16         //~^ ERROR mismatched types
17         //~| expected `i8`, found `u8`
18     }
19
20     let x = A::Ok;
21 }
22
23 fn f_u8() {
24     #[repr(u8)]
25     enum A {
26         Ok = u8::MAX - 1,
27         Ok2,
28         OhNo = 0_i8,
29         //~^ ERROR mismatched types
30         //~| expected `u8`, found `i8`
31     }
32
33     let x = A::Ok;
34 }
35
36 fn f_i16() {
37     #[repr(i16)]
38     enum A {
39         Ok = i16::MAX - 1,
40         Ok2,
41         OhNo = 0_u16,
42         //~^ ERROR mismatched types
43         //~| expected `i16`, found `u16`
44     }
45
46     let x = A::Ok;
47 }
48
49 fn f_u16() {
50     #[repr(u16)]
51     enum A {
52         Ok = u16::MAX - 1,
53         Ok2,
54         OhNo = 0_i16,
55         //~^ ERROR mismatched types
56         //~| expected `u16`, found `i16`
57     }
58
59     let x = A::Ok;
60 }
61
62 fn f_i32() {
63     #[repr(i32)]
64     enum A {
65         Ok = i32::MAX - 1,
66         Ok2,
67         OhNo = 0_u32,
68         //~^ ERROR mismatched types
69         //~| expected `i32`, found `u32`
70     }
71
72     let x = A::Ok;
73 }
74
75 fn f_u32() {
76     #[repr(u32)]
77     enum A {
78         Ok = u32::MAX - 1,
79         Ok2,
80         OhNo = 0_i32,
81         //~^ ERROR mismatched types
82         //~| expected `u32`, found `i32`
83     }
84
85     let x = A::Ok;
86 }
87
88 fn f_i64() {
89     #[repr(i64)]
90     enum A {
91         Ok = i64::MAX - 1,
92         Ok2,
93         OhNo = 0_u64,
94         //~^ ERROR mismatched types
95         //~| expected `i64`, found `u64`
96     }
97
98     let x = A::Ok;
99 }
100
101 fn f_u64() {
102     #[repr(u64)]
103     enum A {
104         Ok = u64::MAX - 1,
105         Ok2,
106         OhNo = 0_i64,
107         //~^ ERROR mismatched types
108         //~| expected `u64`, found `i64`
109     }
110
111     let x = A::Ok;
112 }
113
114 fn main() { }