Auto merge of #9835 - koka831:fix/9035, r=Alexendoo

Avoid linting unsized mutable reference

fix https://github.com/rust-lang/rust-clippy/issues/9035

changelog: [`mut_mut`] avoid suggesting to reborrow unsized mutable reference
This commit is contained in:
bors 2022-11-12 21:07:18 +00:00
commit 9f283c97e1
2 changed files with 26 additions and 7 deletions

View File

@ -68,13 +68,15 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr<'_>) {
expr.span,
"generally you want to avoid `&mut &mut _` if possible",
);
} else if let ty::Ref(_, _, hir::Mutability::Mut) = self.cx.typeck_results().expr_ty(e).kind() {
span_lint(
self.cx,
MUT_MUT,
expr.span,
"this expression mutably borrows a mutable reference. Consider reborrowing",
);
} else if let ty::Ref(_, ty, hir::Mutability::Mut) = self.cx.typeck_results().expr_ty(e).kind() {
if ty.peel_refs().is_sized(self.cx.tcx.at(expr.span), self.cx.param_env) {
span_lint(
self.cx,
MUT_MUT,
expr.span,
"this expression mutably borrows a mutable reference. Consider reborrowing",
);
}
}
}
}

View File

@ -57,3 +57,20 @@ fn issue6922() {
// do not lint from an external macro
mut_mut!();
}
mod issue9035 {
use std::fmt::Display;
struct Foo<'a> {
inner: &'a mut dyn Display,
}
impl Foo<'_> {
fn foo(&mut self) {
let hlp = &mut self.inner;
bar(hlp);
}
}
fn bar(_: &mut impl Display) {}
}