False positive of lint missing_debug_implementations if Debug is implemented for an alias type (e.g., projection) that can get normalized to the relevant type #157758
Copy link
Copy link
Closed
1 / 11 of 1 issue completed
Copy link
Labels
A-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.Area: Lints (warnings about flaws in source code) such as unused_mut.C-bugCategory: This is a bug.Category: This is a bug.L-false-positiveLint: False positive (should not have fired).Lint: False positive (should not have fired).L-missing_debug_implementationsLint: missing_debug_implementationsLint: missing_debug_implementationsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
Subissue: #157757.
#![deny(missing_debug_implementations)]
pub struct Local; //~ ERROR type does not implement `Debug`; consider adding `#[derive(Debug)]` or a manu
impl std::fmt::Debug for <Local as Identity>::Output {
fn fmt(&self, _: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { Ok(()) }
}
pub trait Identity { type Output; }
impl<T> Identity for T { type Output = T; }For some reason missing_debug_implementations doesn't actually query the trait solver (!) (if the fast path doesn't apply), it literally does
let has_impl = cx
.tcx
.non_blanket_impls_for_ty(
debug,
cx.tcx.type_of(item.owner_id).instantiate_identity().skip_norm_wip(),
)
.next()
.is_some();but I don't think that function should be used for "correctness" (well, it's a lint), ideally it would only be used as a fast path (barring more specific use cases).
For comparison, lint missing_copy_implementations calls tcx.type_is_copy_modulo_regions() which has a fast path but then queries the trait solver.
Metadata
Metadata
Assignees
Labels
A-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.Area: Lints (warnings about flaws in source code) such as unused_mut.C-bugCategory: This is a bug.Category: This is a bug.L-false-positiveLint: False positive (should not have fired).Lint: False positive (should not have fired).L-missing_debug_implementationsLint: missing_debug_implementationsLint: missing_debug_implementationsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Activity
[-]False positive if lint `missing_debug_implementations` if `Debug` is implemented for an alias type (e.g., projection)[/-][+]False positive if lint `missing_debug_implementations` if `Debug` is implemented for an alias type (e.g., projection) that can get normalized to the relevant type[/+]missing_debug_implementationsifDebugis implemented for a free alias type that expands to the relevant type #157757[-]False positive if lint `missing_debug_implementations` if `Debug` is implemented for an alias type (e.g., projection) that can get normalized to the relevant type[/-][+]False positive of lint `missing_debug_implementations` if `Debug` is implemented for an alias type (e.g., projection) that can get normalized to the relevant type[/+]mu001999 commentedon Jun 12, 2026
@rustbot claim
Rollup merge of rust-lang#157810 - mu001999-contrib:fix-157758, r=mat…
Rollup merge of rust-lang#157810 - mu001999-contrib:fix-157758, r=mat…
Unrolled build for #157810
Rollup merge of #157810 - mu001999-contrib:fix-157758, r=mati865