// Test the enum_intrinsics_non_enums lint. #![feature(variant_count)] use std::mem::{discriminant, variant_count}; enum SomeEnum { A, B, } struct SomeStruct; fn generic_discriminant(v: &T) { discriminant::(v); } fn generic_variant_count() -> usize { variant_count::() } fn test_discriminant() { discriminant(&SomeEnum::A); generic_discriminant(&SomeEnum::B); discriminant(&()); //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type discriminant(&&SomeEnum::B); //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type discriminant(&SomeStruct); //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type discriminant(&123u32); //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type discriminant(&&123i8); //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type } fn test_variant_count() { variant_count::(); generic_variant_count::(); variant_count::<&str>(); //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type variant_count::<*const u8>(); //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type variant_count::<()>(); //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type variant_count::<&SomeEnum>(); //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type } fn main() { test_discriminant(); test_variant_count(); // The lint ignores cases where the type is generic, so these should be // allowed even though their return values are unspecified generic_variant_count::(); generic_discriminant::(&SomeStruct); }