| //@ only-64bit | |
| #![feature(rustc_attrs)] | |
| #![crate_type = "lib"] | |
| // When picking a representation for things that don't force a particular discriminant type, | |
| // we look at how the value was actually written, which means that "equivalent" things | |
| // actually need to come out different. | |
| // The tests run only on 64-bit because we have to give things as `isize` in these cases. | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(Rust)] | |
| enum NegativeByteRust { | |
| //~^ ERROR: value: i8, valid_range: 155..=156 | |
| A = -100, | |
| B = -101, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(C)] | |
| enum NegativeByteC { | |
| //~^ ERROR: value: i32, valid_range: 4294967195..=4294967196 | |
| A = -100, | |
| B = -101, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(Rust)] | |
| enum PositiveByteRust { | |
| //~^ ERROR: value: u8, valid_range: 155..=156 | |
| A = 256 - 100, | |
| B = 256 - 101, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(C)] | |
| enum PositiveByteC { | |
| //~^ ERROR: value: u32, valid_range: 155..=156 | |
| A = 256 - 100, | |
| B = 256 - 101, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(Rust)] | |
| enum Negative32BitRust { | |
| //~^ ERROR: value: i32, valid_range: 0..=2147483648 | |
| A = 0, | |
| B = i32::MIN as isize, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(C)] | |
| enum Negative32BitC { | |
| //~^ ERROR: value: i32, valid_range: 0..=2147483648 | |
| A = 0, | |
| B = i32::MIN as isize, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(Rust)] | |
| enum Positive32BitRust { | |
| //~^ ERROR: value: u32, valid_range: 0..=2147483648 | |
| A = 0, | |
| B = i32::MIN.cast_unsigned() as isize, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(C)] | |
| enum Positive32BitC { | |
| //~^ ERROR: value: u32, valid_range: 0..=2147483648 | |
| A = 0, | |
| B = i32::MIN.cast_unsigned() as isize, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(Rust)] | |
| enum Negative64BitRust { | |
| //~^ ERROR: value: i64, valid_range: 9223372036854775808..=9223372036854775809 | |
| A = i64::MIN as isize, | |
| B = i64::MIN as isize + 1, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(C)] | |
| enum Negative64BitC { | |
| //~^ ERROR: value: i64, valid_range: 9223372036854775808..=9223372036854775809 | |
| A = i64::MIN as isize, | |
| //~^ WARN: enum discriminant does not fit into C | |
| //~| WARN: previously accepted | |
| B = i64::MIN as isize + 1, | |
| //~^ WARN: enum discriminant does not fit into C | |
| //~| WARN: previously accepted | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(Rust)] | |
| enum Positive64BitRust { | |
| //~^ ERROR: value: u64, valid_range: 9223372036854775806..=9223372036854775807 | |
| A = i64::MAX as isize - 1, | |
| B = i64::MAX as isize, | |
| } | |
| #[rustc_dump_layout(largest_niche)] | |
| #[repr(C)] | |
| enum Positive64BitC { | |
| //~^ ERROR: value: u64, valid_range: 9223372036854775806..=9223372036854775807 | |
| A = i64::MAX as isize - 1, | |
| //~^ WARN: enum discriminant does not fit into C | |
| //~| WARN: previously accepted | |
| B = i64::MAX as isize, | |
| //~^ WARN: enum discriminant does not fit into C | |
| //~| WARN: previously accepted | |
| } |