//! 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: //@ 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(); }