]> git.lizzy.rs Git - rust.git/blob - src/test/compile-fail/enum-discrim-too-small.rs
auto merge of #20760 : alexcrichton/rust/rollup, r=alexcrichton
[rust.git] / src / test / compile-fail / enum-discrim-too-small.rs
1 // Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 #[repr(u8)] //~ NOTE discriminant type specified here
12 enum Eu8 {
13     Au8 = 23,
14     Bu8 = 223,
15     Cu8 = -23, //~ ERROR discriminant value outside specified type
16 }
17
18 #[repr(i8)] //~ NOTE discriminant type specified here
19 enum Ei8 {
20     Ai8 = 23,
21     Bi8 = -23,
22     Ci8 = 223, //~ ERROR discriminant value outside specified type
23 }
24
25 #[repr(u16)] //~ NOTE discriminant type specified here
26 enum Eu16 {
27     Au16 = 23,
28     Bu16 = 55555,
29     Cu16 = -22333, //~ ERROR discriminant value outside specified type
30 }
31
32 #[repr(i16)] //~ NOTE discriminant type specified here
33 enum Ei16 {
34     Ai16 = 23,
35     Bi16 = -22333,
36     Ci16 = 55555, //~ ERROR discriminant value outside specified type
37 }
38
39 #[repr(u32)] //~ NOTE discriminant type specified here
40 enum Eu32 {
41     Au32 = 23,
42     Bu32 = 3_000_000_000,
43     Cu32 = -2_000_000_000, //~ ERROR discriminant value outside specified type
44 }
45
46 #[repr(i32)] //~ NOTE discriminant type specified here
47 enum Ei32 {
48     Ai32 = 23,
49     Bi32 = -2_000_000_000,
50     Ci32 = 3_000_000_000, //~ ERROR discriminant value outside specified type
51 }
52
53 // u64 currently allows negative numbers, and i64 allows numbers greater than `1<<63`.  This is a
54 // little counterintuitive, but since the discriminant can store all the bits, and extracting it
55 // with a cast requires specifying the signedness, there is no loss of information in those cases.
56 // This also applies to isize and usize on 64-bit targets.
57
58 pub fn main() { }