UseOk => { }
UseWhileBorrowed(loan_path, loan_span) => {
let desc = self.bccx.loan_path_to_string(copy_path);
- self.bccx.cannot_use_when_mutably_borrowed(span, &desc, Origin::Ast)
- .span_label(loan_span,
- format!("borrow of `{}` occurs here",
- &self.bccx.loan_path_to_string(&loan_path))
- )
- .span_label(span,
- format!("use of borrowed `{}`",
- &self.bccx.loan_path_to_string(&loan_path)))
+ self.bccx.cannot_use_when_mutably_borrowed(
+ span, &desc,
+ loan_span, &self.bccx.loan_path_to_string(&loan_path),
+ Origin::Ast)
.emit();
}
}
_context: Context,
(lvalue, span): (&Lvalue, Span),
borrow : &BorrowData) {
- let described_lvalue = self.describe_lvalue(lvalue);
- let borrow_span = self.retrieve_borrow_span(borrow);
let mut err = self.tcx.cannot_use_when_mutably_borrowed(
- span, &described_lvalue, Origin::Mir);
-
- err.span_label(borrow_span, format!("borrow of `{}` occurs here", described_lvalue));
- err.span_label(span, format!("use of borrowed `{}`", described_lvalue));
+ span, &self.describe_lvalue(lvalue),
+ self.retrieve_borrow_span(borrow), &self.describe_lvalue(&borrow.lvalue),
+ Origin::Mir);
err.emit();
}
desc, OGN=o)
}
- fn cannot_use_when_mutably_borrowed(&self, span: Span, desc: &str, o: Origin)
+ fn cannot_use_when_mutably_borrowed(&self,
+ span: Span,
+ desc: &str,
+ borrow_span: Span,
+ borrow_desc: &str,
+ o: Origin)
-> DiagnosticBuilder
{
- struct_span_err!(self, span, E0503,
+ let mut err = struct_span_err!(self, span, E0503,
"cannot use `{}` because it was mutably borrowed{OGN}",
- desc, OGN=o)
+ desc, OGN=o);
+
+ err.span_label(borrow_span, format!("borrow of `{}` occurs here", borrow_desc));
+ err.span_label(span, format!("use of borrowed `{}`", borrow_desc));
+
+ err
}
fn cannot_act_on_uninitialized_variable(&self,