]> git.lizzy.rs Git - rust.git/blob - src/test/ui/discrim/discrim-ill-typed.rs
Rollup merge of #66575 - Mark-Simulacrum:no-uii, r=petrochenkov
[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 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 = 0_u8,
18         //~^ ERROR mismatched types
19         //~| expected `i8`, found `u8`
20     }
21
22     let x = A::Ok;
23 }
24
25 fn f_u8() {
26     #[repr(u8)]
27     enum A {
28         Ok = u8::MAX - 1,
29         Ok2,
30         OhNo = 0_i8,
31         //~^ ERROR mismatched types
32         //~| expected `u8`, found `i8`
33     }
34
35     let x = A::Ok;
36 }
37
38 fn f_i16() {
39     #[repr(i16)]
40     enum A {
41         Ok = i16::MAX - 1,
42         Ok2,
43         OhNo = 0_u16,
44         //~^ ERROR mismatched types
45         //~| expected `i16`, found `u16`
46     }
47
48     let x = A::Ok;
49 }
50
51 fn f_u16() {
52     #[repr(u16)]
53     enum A {
54         Ok = u16::MAX - 1,
55         Ok2,
56         OhNo = 0_i16,
57         //~^ ERROR mismatched types
58         //~| expected `u16`, found `i16`
59     }
60
61     let x = A::Ok;
62 }
63
64 fn f_i32() {
65     #[repr(i32)]
66     enum A {
67         Ok = i32::MAX - 1,
68         Ok2,
69         OhNo = 0_u32,
70         //~^ ERROR mismatched types
71         //~| expected `i32`, found `u32`
72     }
73
74     let x = A::Ok;
75 }
76
77 fn f_u32() {
78     #[repr(u32)]
79     enum A {
80         Ok = u32::MAX - 1,
81         Ok2,
82         OhNo = 0_i32,
83         //~^ ERROR mismatched types
84         //~| expected `u32`, found `i32`
85     }
86
87     let x = A::Ok;
88 }
89
90 fn f_i64() {
91     #[repr(i64)]
92     enum A {
93         Ok = i64::MAX - 1,
94         Ok2,
95         OhNo = 0_u64,
96         //~^ ERROR mismatched types
97         //~| expected `i64`, found `u64`
98     }
99
100     let x = A::Ok;
101 }
102
103 fn f_u64() {
104     #[repr(u64)]
105     enum A {
106         Ok = u64::MAX - 1,
107         Ok2,
108         OhNo = 0_i64,
109         //~^ ERROR mismatched types
110         //~| expected `u64`, found `i64`
111     }
112
113     let x = A::Ok;
114 }
115
116 fn main() { }