| // skip-filecheck |
| // EMIT_MIR enum_cast.foo.built.after.mir |
| // EMIT_MIR enum_cast.bar.built.after.mir |
| // EMIT_MIR enum_cast.boo.built.after.mir |
| // EMIT_MIR enum_cast.far.built.after.mir |
| |
| enum Foo { |
| A, |
| } |
| |
| enum Bar { |
| A, |
| B, |
| } |
| |
| #[repr(u8)] |
| enum Boo { |
| A, |
| B, |
| } |
| |
| #[repr(i16)] |
| enum Far { |
| A, |
| B, |
| } |
| |
| fn foo(foo: Foo) -> usize { |
| foo as usize |
| } |
| |
| fn bar(bar: Bar) -> usize { |
| bar as usize |
| } |
| |
| fn boo(boo: Boo) -> usize { |
| boo as usize |
| } |
| |
| fn far(far: Far) -> isize { |
| far as isize |
| } |
| |
| // EMIT_MIR enum_cast.droppy.built.after.mir |
| enum Droppy { |
| A, |
| B, |
| C, |
| } |
| |
| impl Drop for Droppy { |
| fn drop(&mut self) {} |
| } |
| |
| fn droppy() { |
| { |
| let x = Droppy::C; |
| // remove this entire test once `cenum_impl_drop_cast` becomes a hard error |
| #[allow(cenum_impl_drop_cast)] |
| let y = x as usize; |
| } |
| let z = Droppy::B; |
| } |
| |
| #[repr(i16)] |
| enum SignedAroundZero { |
| A = -2, |
| B = 0, |
| C = 2, |
| } |
| |
| #[repr(u16)] |
| enum UnsignedAroundZero { |
| A = 65535, |
| B = 0, |
| C = 1, |
| } |
| |
| // EMIT_MIR enum_cast.signy.built.after.mir |
| fn signy(x: SignedAroundZero) -> i16 { |
| x as i16 |
| } |
| |
| // EMIT_MIR enum_cast.unsigny.built.after.mir |
| fn unsigny(x: UnsignedAroundZero) -> u16 { |
| // FIXME: This doesn't get an around-the-end range today, sadly. |
| x as u16 |
| } |
| |
| enum NotStartingAtZero { |
| A = 4, |
| B = 6, |
| C = 8, |
| } |
| |
| // EMIT_MIR enum_cast.offsetty.built.after.mir |
| fn offsetty(x: NotStartingAtZero) -> u32 { |
| x as u32 |
| } |
| |
| fn main() {} |