Rollup merge of #124460 - long-long-float:show-notice-about-enum-with-debug, r=pnkfelix
Show notice about "never used" of Debug for enum
Close #123068
If an ADT implements `Debug` trait and it is not used, the compiler says a note that indicates intentionally ignored during dead code analysis as [this note](2207179a59/tests/ui/lint/dead-code/unused-variant.stderr (L9)
).
However this node is not shown for variants that have fields in enum. This PR fixes to show the note.
This commit is contained in:
commit
00e5f5886a
3 changed files with 55 additions and 1 deletions
|
@ -1010,6 +1010,22 @@ impl<'tcx> DeadVisitor<'tcx> {
|
|||
parent_item: Option<LocalDefId>,
|
||||
report_on: ReportOn,
|
||||
) {
|
||||
fn get_parent_if_enum_variant<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
may_variant: LocalDefId,
|
||||
) -> LocalDefId {
|
||||
if let Node::Variant(_) = tcx.hir_node_by_def_id(may_variant)
|
||||
&& let Some(enum_did) = tcx.opt_parent(may_variant.to_def_id())
|
||||
&& let Some(enum_local_id) = enum_did.as_local()
|
||||
&& let Node::Item(item) = tcx.hir_node_by_def_id(enum_local_id)
|
||||
&& let ItemKind::Enum(_, _) = item.kind
|
||||
{
|
||||
enum_local_id
|
||||
} else {
|
||||
may_variant
|
||||
}
|
||||
}
|
||||
|
||||
let Some(&first_item) = dead_codes.first() else {
|
||||
return;
|
||||
};
|
||||
|
@ -1053,6 +1069,9 @@ impl<'tcx> DeadVisitor<'tcx> {
|
|||
};
|
||||
|
||||
let encl_def_id = parent_item.unwrap_or(first_item.def_id);
|
||||
// If parent of encl_def_id is an enum, use the parent ID intead.
|
||||
let encl_def_id = get_parent_if_enum_variant(tcx, encl_def_id);
|
||||
|
||||
let ignored_derived_impls =
|
||||
if let Some(ign_traits) = self.ignored_derived_traits.get(&encl_def_id) {
|
||||
let trait_list = ign_traits
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue