| // 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<T>(v: &T) { | 
 |     discriminant::<T>(v); | 
 | } | 
 |  | 
 | fn generic_variant_count<T>() -> usize { | 
 |     variant_count::<T>() | 
 | } | 
 |  | 
 | 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::<SomeEnum>(); | 
 |     generic_variant_count::<SomeEnum>(); | 
 |  | 
 |     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::<SomeStruct>(); | 
 |     generic_discriminant::<SomeStruct>(&SomeStruct); | 
 | } |