1 // Test the enum_intrinsics_non_enums lint.
3 #![feature(variant_count)]
5 use std::mem::{discriminant, variant_count};
14 fn generic_discriminant<T>(v: &T) {
18 fn generic_variant_count<T>() -> usize {
22 fn test_discriminant() {
23 discriminant(&SomeEnum::A);
24 generic_discriminant(&SomeEnum::B);
27 //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type
29 discriminant(&&SomeEnum::B);
30 //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type
32 discriminant(&SomeStruct);
33 //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type
35 discriminant(&123u32);
36 //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type
38 discriminant(&&123i8);
39 //~^ error: the return value of `mem::discriminant` is unspecified when called with a non-enum type
42 fn test_variant_count() {
43 variant_count::<SomeEnum>();
44 generic_variant_count::<SomeEnum>();
46 variant_count::<&str>();
47 //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type
49 variant_count::<*const u8>();
50 //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type
52 variant_count::<()>();
53 //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type
55 variant_count::<&SomeEnum>();
56 //~^ error: the return value of `mem::variant_count` is unspecified when called with a non-enum type
63 // The lint ignores cases where the type is generic, so these should be
64 // allowed even though their return values are unspecified
65 generic_variant_count::<SomeStruct>();
66 generic_discriminant::<SomeStruct>(&SomeStruct);