@@ -15,8 +15,8 @@ use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
1515use rustc_middle:: middle:: privacy:: Level ;
1616use rustc_middle:: query:: Providers ;
1717use rustc_middle:: ty:: { self , TyCtxt } ;
18- use rustc_session:: lint:: builtin :: { DEAD_CODE , UNUSED_TUPLE_STRUCT_FIELDS } ;
19- use rustc_session:: lint:: { self , Lint , LintId } ;
18+ use rustc_session:: lint;
19+ use rustc_session:: lint:: builtin :: DEAD_CODE ;
2020use rustc_span:: symbol:: { sym, Symbol } ;
2121use rustc_target:: abi:: FieldIdx ;
2222use std:: mem;
@@ -766,6 +766,12 @@ enum ShouldWarnAboutField {
766766 No ,
767767}
768768
769+ #[ derive( Debug , Copy , Clone , PartialEq , Eq ) ]
770+ enum ReportOn {
771+ TupleField ,
772+ NamedField ,
773+ }
774+
769775impl < ' tcx > DeadVisitor < ' tcx > {
770776 fn should_warn_about_field ( & mut self , field : & ty:: FieldDef ) -> ShouldWarnAboutField {
771777 if self . live_symbols . contains ( & field. did . expect_local ( ) ) {
@@ -787,9 +793,9 @@ impl<'tcx> DeadVisitor<'tcx> {
787793 ShouldWarnAboutField :: Yes
788794 }
789795
790- fn def_lint_level ( & self , lint : & ' static Lint , id : LocalDefId ) -> lint:: Level {
796+ fn def_lint_level ( & self , id : LocalDefId ) -> lint:: Level {
791797 let hir_id = self . tcx . local_def_id_to_hir_id ( id) ;
792- self . tcx . lint_level_at_node ( lint , hir_id) . 0
798+ self . tcx . lint_level_at_node ( DEAD_CODE , hir_id) . 0
793799 }
794800
795801 // # Panics
@@ -803,7 +809,7 @@ impl<'tcx> DeadVisitor<'tcx> {
803809 dead_codes : & [ & DeadItem ] ,
804810 participle : & str ,
805811 parent_item : Option < LocalDefId > ,
806- lint : & ' static Lint ,
812+ report_on : ReportOn ,
807813 ) {
808814 let Some ( & first_item) = dead_codes. first ( ) else {
809815 return ;
@@ -864,8 +870,8 @@ impl<'tcx> DeadVisitor<'tcx> {
864870 None
865871 } ;
866872
867- let diag = if LintId :: of ( lint ) == LintId :: of ( UNUSED_TUPLE_STRUCT_FIELDS ) {
868- MultipleDeadCodes :: UnusedTupleStructFields {
873+ let diag = match report_on {
874+ ReportOn :: TupleField => MultipleDeadCodes :: UnusedTupleStructFields {
869875 multiple,
870876 num,
871877 descr,
@@ -874,29 +880,29 @@ impl<'tcx> DeadVisitor<'tcx> {
874880 change_fields_suggestion : ChangeFieldsToBeOfUnitType { num, spans : spans. clone ( ) } ,
875881 parent_info,
876882 ignored_derived_impls,
877- }
878- } else {
879- MultipleDeadCodes :: DeadCodes {
883+ } ,
884+
885+ ReportOn :: NamedField => MultipleDeadCodes :: DeadCodes {
880886 multiple,
881887 num,
882888 descr,
883889 participle,
884890 name_list,
885891 parent_info,
886892 ignored_derived_impls,
887- }
893+ } ,
888894 } ;
889895
890896 let hir_id = tcx. local_def_id_to_hir_id ( first_item. def_id ) ;
891- self . tcx . emit_spanned_lint ( lint , hir_id, MultiSpan :: from_spans ( spans) , diag) ;
897+ self . tcx . emit_spanned_lint ( DEAD_CODE , hir_id, MultiSpan :: from_spans ( spans) , diag) ;
892898 }
893899
894900 fn warn_multiple (
895901 & self ,
896902 def_id : LocalDefId ,
897903 participle : & str ,
898904 dead_codes : Vec < DeadItem > ,
899- lint : & ' static Lint ,
905+ report_on : ReportOn ,
900906 ) {
901907 let mut dead_codes = dead_codes
902908 . iter ( )
@@ -907,17 +913,17 @@ impl<'tcx> DeadVisitor<'tcx> {
907913 }
908914 dead_codes. sort_by_key ( |v| v. level ) ;
909915 for group in dead_codes[ ..] . group_by ( |a, b| a. level == b. level ) {
910- self . lint_at_single_level ( & group, participle, Some ( def_id) , lint ) ;
916+ self . lint_at_single_level ( & group, participle, Some ( def_id) , report_on ) ;
911917 }
912918 }
913919
914920 fn warn_dead_code ( & mut self , id : LocalDefId , participle : & str ) {
915921 let item = DeadItem {
916922 def_id : id,
917923 name : self . tcx . item_name ( id. to_def_id ( ) ) ,
918- level : self . def_lint_level ( DEAD_CODE , id) ,
924+ level : self . def_lint_level ( id) ,
919925 } ;
920- self . lint_at_single_level ( & [ & item] , participle, None , DEAD_CODE ) ;
926+ self . lint_at_single_level ( & [ & item] , participle, None , ReportOn :: NamedField ) ;
921927 }
922928
923929 fn check_definition ( & mut self , def_id : LocalDefId ) {
@@ -964,12 +970,12 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalModDefId) {
964970 let def_id = item. id . owner_id . def_id ;
965971 if !visitor. is_live_code ( def_id) {
966972 let name = tcx. item_name ( def_id. to_def_id ( ) ) ;
967- let level = visitor. def_lint_level ( DEAD_CODE , def_id) ;
973+ let level = visitor. def_lint_level ( def_id) ;
968974
969975 dead_items. push ( DeadItem { def_id, name, level } )
970976 }
971977 }
972- visitor. warn_multiple ( item. owner_id . def_id , "used" , dead_items, DEAD_CODE ) ;
978+ visitor. warn_multiple ( item. owner_id . def_id , "used" , dead_items, ReportOn :: NamedField ) ;
973979 }
974980
975981 if !live_symbols. contains ( & item. owner_id . def_id ) {
@@ -991,32 +997,38 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalModDefId) {
991997 let def_id = variant. def_id . expect_local ( ) ;
992998 if !live_symbols. contains ( & def_id) {
993999 // Record to group diagnostics.
994- let level = visitor. def_lint_level ( DEAD_CODE , def_id) ;
1000+ let level = visitor. def_lint_level ( def_id) ;
9951001 dead_variants. push ( DeadItem { def_id, name : variant. name , level } ) ;
9961002 continue ;
9971003 }
9981004
9991005 let is_positional = variant. fields . raw . first ( ) . map_or ( false , |field| {
10001006 field. name . as_str ( ) . starts_with ( |c : char | c. is_ascii_digit ( ) )
10011007 } ) ;
1002- let lint = if is_positional { UNUSED_TUPLE_STRUCT_FIELDS } else { DEAD_CODE } ;
1008+ let report_on =
1009+ if is_positional { ReportOn :: TupleField } else { ReportOn :: NamedField } ;
10031010 let dead_fields = variant
10041011 . fields
10051012 . iter ( )
10061013 . filter_map ( |field| {
10071014 let def_id = field. did . expect_local ( ) ;
10081015 if let ShouldWarnAboutField :: Yes = visitor. should_warn_about_field ( field) {
1009- let level = visitor. def_lint_level ( lint , def_id) ;
1016+ let level = visitor. def_lint_level ( def_id) ;
10101017 Some ( DeadItem { def_id, name : field. name , level } )
10111018 } else {
10121019 None
10131020 }
10141021 } )
10151022 . collect ( ) ;
1016- visitor. warn_multiple ( def_id, "read" , dead_fields, lint ) ;
1023+ visitor. warn_multiple ( def_id, "read" , dead_fields, report_on ) ;
10171024 }
10181025
1019- visitor. warn_multiple ( item. owner_id . def_id , "constructed" , dead_variants, DEAD_CODE ) ;
1026+ visitor. warn_multiple (
1027+ item. owner_id . def_id ,
1028+ "constructed" ,
1029+ dead_variants,
1030+ ReportOn :: NamedField ,
1031+ ) ;
10201032 }
10211033 }
10221034
0 commit comments