// 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() {}