Avoid lint to unsized mutable reference
This commit is contained in:
parent
cad0d3d6da
commit
93edc127a0
@ -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",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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) {}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user