| //! Regression test to ensure false positive `dead_code` diagnostic warnings are not triggered for | |
| //! structs and enums that implement static trait functions or use associated constants. | |
| //! | |
| //! Aliased versions of all cases are also tested | |
| //! | |
| //! Issue: <https://github.com/rust-lang/rust/issues/23808> | |
| //@ check-pass | |
| #![deny(dead_code)] | |
| trait Const { | |
| const C: (); | |
| } | |
| trait StaticFn { | |
| fn sfn(); | |
| } | |
| macro_rules! impl_const {($($T:ident),*) => {$( | |
| impl Const for $T { | |
| const C: () = (); | |
| } | |
| )*}} | |
| macro_rules! impl_static_fn {($($T:ident),*) => {$( | |
| impl StaticFn for $T { | |
| fn sfn() {} | |
| } | |
| )*}} | |
| struct ConstStruct; | |
| enum ConstEnum {} | |
| struct AliasedConstStruct; | |
| type AliasConstStruct = AliasedConstStruct; | |
| enum AliasedConstEnum {} | |
| type AliasConstEnum = AliasedConstEnum; | |
| impl_const!(ConstStruct, ConstEnum, AliasedConstStruct, AliasedConstEnum); | |
| struct StaticFnStruct; | |
| enum StaticFnEnum {} | |
| struct AliasedStaticFnStruct; | |
| type AliasStaticFnStruct = AliasedStaticFnStruct; | |
| enum AliasedStaticFnEnum {} | |
| type AliasStaticFnEnum = AliasedStaticFnEnum; | |
| impl_static_fn!(StaticFnStruct, StaticFnEnum, AliasedStaticFnStruct, AliasedStaticFnEnum); | |
| fn main() { | |
| // Use the associated constant for all the types, they should be considered "used" | |
| let () = ConstStruct::C; | |
| let () = ConstEnum::C; | |
| let () = AliasConstStruct::C; | |
| let () = AliasConstEnum::C; | |
| // Use the associated static function for all the types, they should be considered "used" | |
| StaticFnStruct::sfn(); | |
| StaticFnEnum::sfn(); | |
| AliasStaticFnStruct::sfn(); | |
| AliasStaticFnEnum::sfn(); | |
| } |