special case removing &
suggestion
This commit is contained in:
parent
ca1178f022
commit
b73cdf1b29
4 changed files with 45 additions and 12 deletions
|
@ -1787,6 +1787,14 @@ impl Expr<'_> {
|
|||
expr
|
||||
}
|
||||
|
||||
pub fn peel_borrows(&self) -> &Self {
|
||||
let mut expr = self;
|
||||
while let ExprKind::AddrOf(.., inner) = &expr.kind {
|
||||
expr = inner;
|
||||
}
|
||||
expr
|
||||
}
|
||||
|
||||
pub fn can_have_side_effects(&self) -> bool {
|
||||
match self.peel_drop_temps().kind {
|
||||
ExprKind::Path(_) | ExprKind::Lit(_) => false,
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
use super::FnCtxt;
|
||||
|
||||
use crate::type_error_struct;
|
||||
use hir::ExprKind;
|
||||
use rustc_errors::{
|
||||
struct_span_err, Applicability, DelayDm, Diagnostic, DiagnosticBuilder, ErrorGuaranteed,
|
||||
};
|
||||
|
@ -237,12 +238,23 @@ impl<'a, 'tcx> CastCheck<'tcx> {
|
|||
fcx,
|
||||
);
|
||||
|
||||
err.span_suggestion_verbose(
|
||||
self.expr_span.shrink_to_lo(),
|
||||
"dereference the expression",
|
||||
"*",
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
if matches!(self.expr.kind, ExprKind::AddrOf(..)) {
|
||||
// get just the borrow part of the expression
|
||||
let span = self.expr_span.with_hi(self.expr.peel_borrows().span.lo());
|
||||
err.span_suggestion_verbose(
|
||||
span,
|
||||
"remove the unneeded borrow",
|
||||
"",
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
} else {
|
||||
err.span_suggestion_verbose(
|
||||
self.expr_span.shrink_to_lo(),
|
||||
"dereference the expression",
|
||||
"*",
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
|
||||
err.emit();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue